从重定向到STDIN的文件中检测C++中的EOF

Chr*_*ian 2 c++ io file eof

执行命令:

./program < input.txt
Run Code Online (Sandbox Code Playgroud)

使用以下代码检查:

string input;
while(cin) {
  getline(cin, input);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码似乎生成一个额外的getline()调用,其中输入为空.无论\ninput.txt的最后一行是否有a ,都会发生这种情况.

Bil*_*eal 7

@Jacob有正确的解决方案但由于某种原因删除了他的答案.这是循环中发生的事情:

  1. cin 检查是否有任何故障位(BADBIT,FAILBIT)
  2. cin 报告没有问题,因为尚未从文件中读取任何内容.
  3. getline 被调用,它检测文件结束,设置EOF位和FAILBIT.
  4. 循环再次从1执行,除非它退出.

你需要做这样的事情:

std::string input;
while(std::getline(std::cin, input))
{
     //Have your way with the input.
}
Run Code Online (Sandbox Code Playgroud)