C++: ctrl+d 终止程序 (ubuntu)

C++: ctrl+d terminates program (ubuntu)

(C++ 新手)

我有这个简单的代码(针对问题进行了简化):

 int main()
{
    string currInput;
    while (getline(cin, currInput))
    {
    }
    cout << "wont be printed" << std::flush;
    return 0;
}

我调试了一段时间,可能漏掉了什么:

当 运行 它并按 ctrl+d (在一些字符串之后或立即),它不打印while 循环之后的字符串。它只是停止 运行。我认为这可能与冲洗有关,所以我也添加了它。 我错过了什么?

PS: 在debug 运行 的时候,提到了一些关于sighup 信号的事情。

你的错误是 while 循环。你不应该在这里使用循环。发生的事情是它点击这条线并尝试获取输入。无论您是否输入任何内容,如果您点击 CTRL+D 它将结束 getline。但是你有一个 while 循环......所以它会跳回到循环的顶部并得到另一行......然后是另一行......然后是另一行。欢迎来到你的第一个无限循环。

while (getline(cin, currInput))
{
}

最简单的事情就是

getline(cin, currInput);

如果您刚开始编程,这可能就是您想要做的事情。

如果您有勇气,请阅读此页面:http://www.cplusplus.com/reference/string/string/getline/

您会注意到 getline returns 您传入的流。就循环而言,它将评估为 true

所以,在@manni 和@rici 的大力帮助下,我们找到了问题所在。

原来是cLion中的一个已知问题。

sending EOF to stdin in Clion IDE

https://intellij-support.jetbrains.com/hc/en-us/community/posts/206849765-How-to-enter-EOF-Ctrl-z-in-Run-console-

https://youtrack.jetbrains.com/issue/IDEA-12514