我有一段代码可以完成它打算做的工作,但我对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