我有一段代碼可以完成它打算做的工作,但我對failbit有所懷疑。雖然文件顯示在屏幕上,但catch塊始終運行。當達到eof時,爲什麼failbit被設置?也許我不瞭解失敗位的正確含義..有什麼失敗的?爲什麼要設置失敗位。文件似乎已經打印好了
int main()
{
ifstream infile;
char c;
infile.exceptions (ifstream::failbit);
try
{
infile.open("../Dose.c", ios::in);
while (!infile.eof())
{
c=infile.get();
cout << c;
}
infile.close();
}
catch(ifstream::failure e)
{
cout << infile.eof() << " " << infile.fail() << " " << infile.bad() << " " << infile.good() ;
cerr << " Exception opening/reading/closing file\n";
}
return 0;
}
OUTPUT:1 1 0 0異常打開/讀取/關閉文件。所以顯然失敗()和eof被設置。
FWIW,'ios :: in'是不必要的,循環應該是'while(infile.get(c)){cout << c;}','infile.close();'是不必要的, 'return 0;'是不必要的,異常應該被const引用捕獲。 – chris 2014-08-30 01:28:22
是什麼讓你認爲在失敗之前已經達到了eof? [看到這個問題](https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – WhozCraig 2014-08-30 01:30:43