пауза для пользовательской коррекции для ввода

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

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%

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

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

Другие решения

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

пока (! есть)

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

0

По вопросам рекламы [email protected]