为了账号安全,请及时绑定邮箱和手机立即绑定

eof()不好的做法?

eof()不好的做法?

C++
吃鸡游戏 2019-08-19 16:36:15
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";
  }}


查看完整回答
反对 回复 2019-08-19
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您不应该使用它,因为如果由于其他原因输入失败,您可能会被搞砸。

while(!file.eof()) {
    int i;
    file >> i;
    doSomething(i);}

如果文件内容为“WHAARRRRRRGARBL”,上述循环会发生什么?它无限循环,因为它不是文件的结尾,但你仍然无法从中提取int。


查看完整回答
反对 回复 2019-08-19
?
守着一只汪

TA贡献1872条经验 获得超3个赞

如果上述答案令人困惑:

人们认为它的作用是错误的:

  • eof()不会查看您读取的最后一部分是否包含文件的最后一个字节。

  • 它不会查看下一个字节是否在文件结尾之后。

它实际上做了什么:

  • eof()报告最后一次读取是否包含超过文件末尾的字节。

如果eof()为真,那你就犯了一个错误。因此解释了教授的说法。使用它意味着什么,发生了错误。


查看完整回答
反对 回复 2019-08-19
  • 3 回答
  • 0 关注
  • 381 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信