【问题标题】:I am confused about End of File我对文件结束感到困惑
【发布时间】:2023-03-08 05:30:01
【问题描述】:

我真的对文件结束感到困惑。假设我正在运行一个无限循环。在这个循环中,我将一个整数作为输入,然后对其进行处理,直到找到一个文件结尾。但是我是否检查输入是否是文件结尾。以及如何打破循环?

我使用的是 Windows,所以对于 EOF,我输入的是 CTRL+Z。

#include<iostream>
#include<cstdio>
using namespace std;

int main(void)
{
  int n;
  while(true)
  {
    cin >> n;
    if(n==EOF)break;
    cout << n << endl;
  }
  return 0;
}

当我运行此代码并键入 CTRL+z 时,它只会打印我给的最后一个输入,无休止地。

【问题讨论】:

  • 尝试while (cin &gt;&gt; n) 而不是 EOF 检查。

标签: c++


【解决方案1】:

1) 这不是您检查文件结尾的方式。您从哪里了解到operator&gt;&gt; 会返回 EOF 值?

查看您是否尝试读取文件结尾的正确方法是if(cin.eof())。但是,永远不要这样做,因为:

2) 您永远不应该检查文件结尾。相反,您应该检查“最后一个输入操作是否正常工作?”

像这样:

#include<iostream>
#include<cstdio>
using namespace std;

int main(void)
{
  int n;
  while(cin >> n)
  {
    cout << n << endl;
  }
  return 0;
}


参考Reading from text file until EOF repeats last line

【讨论】:

  • 不要忘记对任何对您有帮助的答案进行投票,并接受一个解决您问题的答案。
  • 不过,一旦读取整数失败,这将中断,这可能在可用输入结束之前。
  • @KerrekSB,没错,但我想说这是一个全新的问题(有很多骗子)。原始代码也没有任何形式的验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
相关资源
最近更新 更多