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

时间:2017-08-29 21:13:25

标签: c++ cout eof clion

(C ++新手)

我有这个简单的代码(简化问题):

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

我已经调试了一段时间,我可能会错过一些东西:

运行它并按ctrl + d(在某些字符串之后或立即执行)时,它不会打印while循环之后的字符串。它只是停止运行。我觉得它可能是潮红的东西,所以我也补充说。 我错过了什么?

PS:在调试中运行时,会提到有关sighup信号的信息。

2 个答案:

答案 0 :(得分:0)

所以,在@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

答案 1 :(得分:-2)

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

while (getline(cin, currInput))
{
}

最简单的事情就是

getline(cin, currInput);

如果你开始编程,这可能就是你想要做的。

如果您感到胆大,请阅读此页:http://www.cplusplus.com/reference/string/string/getline/

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