使用cin的while循环条件

时间:2014-04-16 09:39:19

标签: c++ while-loop

我有以下代码

 //in main
 int x;
 while ( cin>>x ){
        // code goes here
 }

现在,我知道这个循环执行,直到x的读取失败,这在发生类型不匹配时发生 因此,按char可以让我走出循环,x的类型为intchar将无法从输入流中读取。
但是问题在于空格,因为它们也不是int所以为什么循环不会在我按下输入或空格时结束?

2 个答案:

答案 0 :(得分:3)

根据The C++ Programming Language Special Edition,$ 21.9建议[5]:

  

请记住默认情况下>>跳过空白; §21.3.2。

并且在$ 21.3.2中:

  

空格被定义为标准   通过调用isspace()定义C空格(空白,制表符,换行符,换页符和回车符)   在(§20.4.2)中。

答案 1 :(得分:1)

@jrok的评论提供了答案。

因此,只要输入是空白,则cin等待可以表示所请求类型的输入。如果流中存在无效字符,或者在消耗了有效的非空白字符后,它将停止 - 该字符为空格。

您可以逐行阅读以检测空输入:

std::string line
while(getline(cin, line)) {
    // Note: Omitting the case where the line contains spaces, only.
    if(line.empty()) {
       // No input;
       break;
    }
    else {
       // Parse and process the line.
    }
}

注意:如果禁用跳过空格,则行为会更改。