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
(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