我的文件只包含一个字符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)
方法解决问题,但这更像是了解那里真正发生的事情的问题。
谢谢。