C + + getline(cin,缓冲区)不会停止当我按CTRL + Z

我正在Windows中编写一个接受string作为inputCLI应用程序。 我假设input的结束是当用户按Ctrl + Z (模仿EOF )。

当我input“ qwe ”并按下Ctrl + Z时getline不是只给tmp分配“ qwe ”,而是由于某种原因要求input一行。 但是, tmp的结果值仍然是“ qwe ”,忽略了多余的行。 我使用的代码如下:

  string tmp; getline(cin, tmp); 

UPD:

正如在C ++和CTRL + Z中所说的那样,它只是一般的Windows行为,其中Ctrl + Z符号must位于行首。

要获得多行input,您应该使用字符读取,直到遇到'\n' || EOF '\n' || EOF

正如OP所解释的那样:这是典型的Windows行为,其中Ctrl + Z符号必须位于行首,否则将无法正常工作。

所以,如果你输入“foo”,然后按Ctrl + Z发送EOF信号,然后输入“bar”,“foo”将按预期读取,然后EOF将在输入缓冲区中等待,直到输入“bar”。 即使用户输入了该程序,程序仍将停在EOF ,“bar”将被忽略。

用cin和CTRL + Z阅读C ++问题 。