让我们看看这个程序:
ifstream filein("hey.txt");
if(filein.eof()){
cout<<"END"<<endl;
}
这里“hey.txt”是空的。所以这里的if条件应该是真的但是它不是
尽管文件为空,为什么eof不返回true?
如果我在if
之前添加了这个,则eof返回true,尽管arr
仍然为空并且文件仍为空,因此两者都未更改
char arr[100];
filein.getline(arr,99);
答案 0 :(得分:5)
程序尝试读取文件末尾后,
eof()
函数返回“true”。
您可以使用std::ifstream::peek()
检查“逻辑文件结尾”。
答案 1 :(得分:3)
在尝试阅读时到达流末尾时设置标志std::ios_base::eofbit
。在尝试读取流的末尾之前,将不会设置此标志。
一般来说,std::ios_base::eofbit
的使用相当有限。唯一合理的用途是在读取失败后抑制错误:如果由于到达文件末尾而导致读取失败通常不会出错。尝试将此标志用于其他任何内容都不起作用。
答案 2 :(得分:3)
eof()
测试&#34;文件结尾&#34; flag是在C ++流对象上设置的。当读取操作吸引来自底层设备(文件,标准输入,管道等)的输入结束时,将设置此标志。在尝试读取空文件之前,不会设置标志。您必须执行一个操作,尝试在流对象上设置标志之前读取内容。