4

让我们看看这个程序:

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);
4

3 回答 3

5

eof()在程序尝试读取文件末尾之后,函数返回“true”。

您可以使用std::ifstream::peek()来检查“逻辑文件结尾”。

于 2012-08-26T22:02:34.213 回答
3

std::ios_base::eofbit在尝试读取时到达流的末尾时设置该标志。在尝试读取流的末尾之前,不会设置此标志。

一般来说,使用std::ios_base::eofbit是相当有限的。唯一合理的用途是在读取失败后抑制错误:如果由于到达文件末尾而导致读取失败,通常不是错误。尝试将此标志用于其他任何事情都行不通。

于 2012-08-26T22:05:20.450 回答
3

eof()测试是否在 C++ 流对象上设置了“文件结束”标志。当读取操作遇到来自底层设备(文件、标准输入、管道等)的输入结束时设置此标志。在您尝试读取空文件之前,未设置标志。在流对象上设置标志之前,您必须执行一个尝试读取某些内容的操作。

于 2012-08-26T22:06:02.853 回答