2013-05-16 4 views
2

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

ifstream input; 
string filename; 
cout<<"Enter the file name"; 
cin>>filename; 
input.open(filename.c_str()); 
while(input.fail()) 
{ 
    cout<<"Incorrect filename, please enter again"; 
    cin>>filename; 
    input.open(filename.c_str()); 
} 

Может ли кто-нибудь помочь? Спасибо

ответ

3

Вам необходимо очистить ввод, если он введен неправильно. Попробуйте следующее:

ifstream input; 
string filename; 
cout<<"Enter the file name"; 
cin>>filename; 
input.open(filename.c_str()); 
while(input.fail()) 
{ 
    input.clear(); 
    cout<<"Incorrect filename, please enter again"; 
    cin>>filename; 
    input.open(filename.c_str()); 
} 
+1

Возможно, стоит отметить, что 'clear()' действительно не очищает ввод, а просто удаляет бит ошибки для потока. – DuncanACoulter