【发布时间】:2010-11-05 14:18:30
【问题描述】:
我最近遇到了一个由使用 fstream::eof() 引起的问题。我从here 读到以下行:
如果已到达相关输入文件的末尾,则函数 eof() 返回 true,否则返回 false。
并且(错误地)假设这意味着如果我使用 fstream::read() 并读取文件末尾,函数 eof() 会告诉我。所以我做了这样的事情(非常笼统):
for(int i = 0; i < max && !file.eof(); i++)
{
file.read(mything, sizeof(mything));
}
问题的出现是因为上面链接页面稍后解释的内容(由于第一段的误导,我最初没有阅读):
相反,如果在最后一个标记之后碰巧有任何空格,则流不会进入 EOF 状态,但尝试读取另一个标记仍然会失败。因此,EOF 标志不能用作循环中的测试,该循环旨在读取所有流内容,直到 EOF。相反,应该在尝试读取后检查失败情况。
所以我改变了,现在我的循环检查 file.fail() 而不是 file.eof(),我了解 eof() 是如何工作的。我的问题是,为什么它会这样工作?是否存在需要这样做的情况?在我看来,一旦你通过了 EOF,你就通过了 EOF,并且 eof() 应该返回 true。
更新 谢谢大家的回复,我想我明白了。我正在执行的唯一操作是read(),我立即检查fail(),所以我认为我没问题。现在,我的问题是, 我将 eof() 用于什么?
【问题讨论】:
-
for(int i = 0; i
标签: c++ iostream library-design