当我按下 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+Zgetline 而不是仅仅分配“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 阅读更多内容。