Я нашел этот хороший маленький фрагмент, который делает паузу для пользователя, но не дает никакого выбора. Я хотел бы разрешить пользователю выйти или повторно ввести, если он / она неправильно набирает имя входного файла. Конечно, программа завершает работу, если файл не существует, но лучше позволить пользователю принять это решение.
void pause() {
cout << "Press ENTER to continue...";
cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
}
Вызов программы сниппет-
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%
Как изменить код, чтобы дать пользователю возможность повторно ввести имя файла. Я отмечаю, что, вероятно, все в порядке, как и для неправильного имени файла, но происходит сбой, когда пользователь вводит неправильное имя файла, например, вчерашняя работа.
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
можете открыть данный файл.
Эта логика великолепна, единственное, что в этом случае работает как `
пока (! есть)
с этим второстепенным модом к вашему решению, он работает и делает то, что я хочу.