我有一個非常簡單的代碼,其功能是鍵入程序將從中讀取數據的文件的名稱。由於該文件可能由於錯誤輸入而不正確,因此如果先前的名稱無效,控制檯將繼續要求用戶輸入名稱。有關在循環中使用ifstream的錯誤
問題是,雖然第一個do-while循環工作正常,但如果在第一個循環中第一次沒有正確鍵入文件的名稱,程序將跳過第二個while循環。但是,如果文件的名稱輸入正確,一切正常。
我想知道爲什麼程序的行爲如此。
感謝您的幫助和您的時間!
#include<iostream>
#include<fstream>
using namespace std;
int main() {
string context;
int step=0,i=0;
ifstream fin;
do {
string filename;
cout << endl << "please type in the name of input file" << endl;
cin >> filename;
string filepath = "files/" + filename;
cout << filepath << endl;
fin.open(filepath.c_str());
} while(!fin.is_open());
while (getline(fin, context)){
cout << context << endl;
cout << "hello" << endl;
}
fin.close();
return 0;
}
謝謝。我改變了它,它工作。 – user1582802
不只*可能會被污染。正確的詞是*是*。該標準規定成功調用「open」不會改變錯誤狀態。如果它已經「不好」,它將會保持不好。所以先清除它。 –