执行命令:
./program < input.txt
使用以下代码检查:
string input;
while(cin) {
getline(cin, input);
}
上面的代码似乎生成了一个额外的getline()
调用,其中输入为空。无论input.txt的最后一行是否有\n
,都会发生这种情况。
答案 0 :(得分:7)
@Jacob有正确的解决方案但由于某种原因删除了他的答案。这是循环中发生的事情:
cin
是否有任何失败位(BADBIT,FAILBIT)cin
报告没有问题,因为尚未从文件中读取任何内容。getline
来检测文件结束,设置EOF位和FAILBIT。你需要做这样的事情:
std::string input;
while(std::getline(std::cin, input))
{
//Have your way with the input.
}
答案 1 :(得分:3)
这个怎么样:
string input;
while(getline(cin, input)) {
//do something with input...
}
答案 2 :(得分:1)
编辑:请注意,在下面的示例中,我向您展示了“如何检测EOF”。正如@Billy指出的那样,您可能希望使用good()
而不是eof()
来检测任何错误条件或 eof。我在答案的最后列出了有关这方面的信息,但这很重要,所以我在顶部添加了这个注释,以确保它清晰。
(原始答案如下)
你想要这个:
string input;
while( !cin.eof() ) {
getline(cin, input);
}
在operator!
上使用iostream
仅检查是否发生了故障或其他错误情况。 ios::operator!()
您可以使用good()
代替!eof()
来检查eof
,badbit
或failbit
的任何条件。 ios::good()