当我按下 CTRL+Z 时,C++ getline(cin, buffer) 不会停止
C++ getline(cin, buffer) doesn't stop when I press CTRL+Z
我正在 Windows
中编写一个 CLI
应用程序,它接受 string
作为输入。我假设输入结束是当用户按下 Ctrl+Z(模仿 EOF
)时。
当我输入“qwe”并按下 Ctrl+Z 时 getline
而不是仅仅分配“qwe" 到 tmp
出于某种原因要求我再输入一行。但是,tmp
中的结果值仍然是“qwe”,忽略了额外的行。我使用的代码如下:
string tmp;
getline(cin, tmp);
UPD:
正如在 C++ Issue with cin and CTRL + Z 中所说,这只是通常的 Windows 行为,其中 Ctrl+Z 符号 must
位于行首。
要获得多行输入,您应该使用按字符阅读,直到遇到 '\n' || EOF
。
正如 OP 所解释的:这是典型的 Windows 行为,其中 Ctrl+Z 符号必须位于行的开头,否则它将不起作用预期。
所以如果你输入"foo",然后按Ctrl+Z发送EOF
信号,然后输入"bar","foo" 将按预期读取,然后 EOF
将在输入缓冲区中等待,直到 "bar" 也被键入。该程序将按原样停止在 EOF
并且 "bar" 将被忽略,即使用户键入它也是如此。
在 C++ Issue with cin and CTRL + Z 阅读更多内容。
我正在 Windows
中编写一个 CLI
应用程序,它接受 string
作为输入。我假设输入结束是当用户按下 Ctrl+Z(模仿 EOF
)时。
当我输入“qwe”并按下 Ctrl+Z 时 getline
而不是仅仅分配“qwe" 到 tmp
出于某种原因要求我再输入一行。但是,tmp
中的结果值仍然是“qwe”,忽略了额外的行。我使用的代码如下:
string tmp;
getline(cin, tmp);
UPD:
正如在 C++ Issue with cin and CTRL + Z 中所说,这只是通常的 Windows 行为,其中 Ctrl+Z 符号 must
位于行首。
要获得多行输入,您应该使用按字符阅读,直到遇到 '\n' || EOF
。
正如 OP 所解释的:这是典型的 Windows 行为,其中 Ctrl+Z 符号必须位于行的开头,否则它将不起作用预期。
所以如果你输入"foo",然后按Ctrl+Z发送EOF
信号,然后输入"bar","foo" 将按预期读取,然后 EOF
将在输入缓冲区中等待,直到 "bar" 也被键入。该程序将按原样停止在 EOF
并且 "bar" 将被忽略,即使用户键入它也是如此。
在 C++ Issue with cin and CTRL + Z 阅读更多内容。