У меня есть следующий код:
string promptPlayerForFile(ifstream &infile, string prompt) {
while (true) {
string filename;
cout << prompt;
getline(cin, filename);
infile.open(filename.c_str());
if (!infile.fail()) return filename;
infile.clear();
cout << "Unable to open that file. Try again." << endl;
}
}
Функция работает должным образом: вы вводите имена файлов до тех пор, пока не дадите правильное имя, в этом случае она связывает поток с файлом и возвращает строку имени файла.
Затем я попытался закомментировать строку infile.clear()
, чтобы посмотреть, что произойдет. (Я прочитал, что он должен быть включен после сбоя, чтобы сбросить соответствующие биты потока.)
Однако, после комментирования, функция ведет себя как прежде. Если я сначала задаю неправильное имя файла, а затем правильное, оно работает, так что каким-то образом биты сброса сбрасываются даже без этой строки. Нужно ли infile.clear()
и как его использовать?