2014-12-17 2 views
0

Я нашел этот симпатичный маленький фрагмент, который делает паузу для пользователя, но он не позволяет выбора. Я хотел бы разрешить пользователю выйти или повторно войти, если он ошибочно вводит имя входного файла. Конечно, программа завершает работу, если файл не существует, но лучше позволить пользователю принять это решение.пауза для коррекции пользователя для ввода

void pause() { 
cout << "Press ENTER to continue..."; 
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
    } 

Вызов программы snippet-

std::string name; 
std::cout << "Please, enter your file name: "; 
std::getline (std::cin,name); 
std::cout << "Hello, " << name << '\n'; 
pause(); 
std::ifstream is (name.c_str(),ios::in | std::ifstream::binary); 

выход для плохого имени файла -

Please, enter your file name: col.tat 
Hello, col.tat 
Press ENTER to continue... 

file not found --- col.tat 

unix% 

Как код может быть изменен, чтобы дать пользователю возможность повторно войти в файл имя. Я отмечаю, что это, вероятно, нормально, так как это плохое имя файла, но не удается, когда пользователь вводит неправильное имя файла, например, вчерашнюю работу.

ответ

0
std::ifstream is; 
do 
{ 
    std::string name; 
    std::cout << "Please, enter your file name: "; 
    std::getline (std::cin,name); 
    std::cout << "Hello, " << name << '\n'; 
    pause(); 
    is.open(name.c_str(),ios::in | std::ifstream::binary); 
} while (!is.is_open()) 

Это будет цикл до тех пор, пока is не сможет открыть данный файл.

0

Этой логика велика, единственный есть, в то время как в этом случае работает как `

в то время как (! Есть)

с этими незначительными модами к вашему решению, он работает и делает то, что я хочу. `

Смежные вопросы