C :CTRL D终止程序(Ubuntu)



(新的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进行评估。

最新更新