c ++程序尝试在eof

时间:2015-09-11 10:35:24

标签: c++ stream eof

我的文件只包含一个字符1(后面没有换行符号)

使用此方法阅读内容:

int value;
ifstream in("somefile");
for (!in.eof())
{
    in >> value;
    cout << "input: " << value << " , eof" << in.eof() << "'\n";
}

给我以下输出:

input: 1 , eof: 0
input: 1 , eof: 1

问题是:

1)为什么首次阅读后没有设置EOF标志?我的意思是,如果程序在第一次尝试时成功读取了数字,它就会知道它的字符串表示结束了。为了找到它,它必须尝试在1字符之后至少读取一个字节,并且它应该已经命中了EOF。为什么没有发生?

2)那就是说,如果我有一个每行一个值的文件,我总是有一个最后输入的副本。这是否意味着我总是要以任何方式丢弃它并且这是正确的?或者例如在in >> value;之后添加对EOF的额外检查,并且只有在成功时,执行我想要的任何逻辑?

我知道我可以使用readline()while(in >> value)方法解决问题,但这更像是了解那里真正发生的事情的问题。

谢谢。

0 个答案:

没有答案