(新的C )
我有这个简单的代码(简化了问题):
int main()
{
string currInput;
while (getline(cin, currInput))
{
}
cout << "wont be printed" << std::flush;
return 0;
}
我已经调试了一段时间,我可能会错过一些东西:
运行它并按下 ctrl d (在某些字符串或立即进行)之后,它不会打印在段循环之后的字符串。它只是停止运行。我认为可能是Flushing的东西,所以我也添加了。我想念什么?
ps:在调试中运行时,它提到了有关叹息信号的信息。
因此,在@manni和@rici的很多帮助下,我们找到了问题。
事实证明这是CLION中的一个已知问题。
请参阅将EOF发送到Chion IDE中的stdin
https://intellij-support.jetbrains.com/hc/en-us/community/posts/206849765-how-to-to-enter-eof-ctrl-z-in-run-console--run-console-
https://youtrack.jetbrains.com/issue/idea-12514
您的错误是while循环。您不应该在这里使用循环。发生的事情是登上这一行并尝试获取输入。无论您是否输入任何内容,但是您在一段时间内就可以使用它。...因此,它会跳回循环的顶部,然后再获得另一行...然后是另一行....然后是另一行。欢迎来到您的第一个无限循环。
while (getline(cin, currInput))
{
}
最简单的事情就是做
getline(cin, currInput);
如果您开始编程,这可能是您想做的。
如果您感到胆怯,请阅读此页:http://www.cplusplus.com/reference/string/string/string/string/getline/
您会注意到getline
返回您传递的流。就循环而言,该流将对true
进行评估。