如何在循环中表示字符串ss不再输入(cin >> ss)

use*_*983 12 c++ file-io cin eof

我用"cin"来读取输入流中的单词,就像

int main( ){
     string word;
     while (cin >> word){
         //do sth on the input word
     }

    // perform some other operations
}
Run Code Online (Sandbox Code Playgroud)

代码结构类似于上面的代码结构.它是可编译的.在执行期间,我继续输入类似的内容

aa bb cc dd
Run Code Online (Sandbox Code Playgroud)

我的问题是如何结束这个输入?换句话说,假设文本文件只是"aa bb cc dd".但我不知道如何让程序知道文件结束.

Mik*_*wis 18

你的代码是正确的.如果您以交互方式输入,则需要发送EOF字符,例如CTRL-D.

在阅读文件时不需要此EOF字符.这是因为一旦你到达输入流的末尾,就没有任何东西可以"cin"了(因为流现在已经关闭),因此while循环退出.

  • 值得注意的是,从键盘发出EOF信号的方式因操作系统而异.MS Windows需要输入CTRL-Z,而Unix和相关操作系统需要CTRL-D. (14认同)

Naw*_*waz 5

正如其他人已经回答了这个问题,我想补充一点:

由于Windows上的Ctrl-Z(以及unix系统上的Ctrl-D)会导致EOF到达,并且您从while循环中退出,但是在while循环外部您无法读取更多输入,因为已经到达EOF.

因此,要cin再次启用读取,您需要清除eof标志和所有其他失败标志,如下所示:

cin.clear();
Run Code Online (Sandbox Code Playgroud)

这样做之后,您可以cin再次开始阅读输入!