按CTRL + Z时,C ++ getline(cin,buffer)不会停止

时间:2016-10-11 11:41:00

标签: c++ windows input getline eof

我正在CLI编写一个Windows个应用程序,它接受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

1 个答案:

答案 0 :(得分:1)

正如OP所解释的:这是典型的Windows行为,其中 Ctrl + Z 符号必须位于行的开头,否则它将无法按预期工作。

因此,如果输入“foo”,则按 Ctrl + Z 发送EOF信号,然后输入“bar”,“foo”将按预期读取,然后{ {1}}将在输入缓冲区中等待,直到输入“bar”。该程序将在EOF停止,“bar”将被忽略,即使用户输入了它。

C++ Issue with cin and CTRL + Z中阅读更多内容。