eof()不好的做法?所以我一直eof()在我的很多需要文件输入的程序中使用该函数,而我的教授说使用它很好,但SO上的一些人说我不应该在没有真正说明原因的情况下使用它。所以我想知道,有充分的理由吗?
3 回答
天涯尽头无女友
TA贡献1831条经验 获得超9个赞
您可以使用它eof
来测试它报告的确切条件 - 您是否尝试读取文件的结尾。您不能使用它来测试是否有更多的输入要读取,或者读取是否成功,这是更常见的测试。
错误:
while (!cin.eof()) { cin >> foo;}
正确:
if (!(cin >> foo)) { if (cin.eof()) { cout << "read failed due to EOF\n"; } else { cout << "read failed due to something other than EOF\n"; }}
慕莱坞森
TA贡献1810条经验 获得超4个赞
您不应该使用它,因为如果由于其他原因输入失败,您可能会被搞砸。
while(!file.eof()) { int i; file >> i; doSomething(i);}
如果文件内容为“WHAARRRRRRGARBL”,上述循环会发生什么?它无限循环,因为它不是文件的结尾,但你仍然无法从中提取int。
守着一只汪
TA贡献1872条经验 获得超3个赞
如果上述答案令人困惑:
人们认为它的作用是错误的:
eof()不会查看您读取的最后一部分是否包含文件的最后一个字节。
它不会查看下一个字节是否在文件结尾之后。
它实际上做了什么:
eof()报告最后一次读取是否包含超过文件末尾的字节。
如果eof()为真,那你就犯了一个错误。因此解释了教授的说法。使用它意味着什么,发生了错误。
- 3 回答
- 0 关注
- 381 浏览
添加回答
举报
0/150
提交
取消