在while循环条件C ++中使用时std :: cin的行为

时间:2011-12-07 05:18:28

标签: c++ while-loop

这是一个小型的程序,它打印刚刚输入到屏幕的整数。

#include <iostream>
int main(int argc, char *argv[])
{
  int n;
  while(std::cin>>n)
    {
      std::cout<<"You typed "<<n<<std::endl;
    } 

  return 0;
}

现在当我输入整数时,程序正常工作。但是,如果我输入10.8等浮点数,程序会向屏幕显示10(因为它应该将浮点数转换为整数),然后程序退出。为什么会这样?下面给出了一个示例终端输出。

Desktop: ./a.out
4
You typed 4
-9
You typed -9
10.8
You typed 10
Desktop: 

2 个答案:

答案 0 :(得分:5)

不应该有任何演员。

10.8被读作10,然后.导致无法将文本解释为整数,从而导致failbit被设置。这反过来会导致你的循环退出。

如果您希望处理10.8,请阅读double,并自行投标。

答案 1 :(得分:5)

在“您输入10”行后,字符“.8”保留在流中。当它尝试将其读入整数时,它会失败,因此它会将流置于错误状态。

由于流处于错误状态,因此循环条件失败,您将退出循环。

(具体来说,它设置了“坏”位,我想,但是由于我处理了这个问题已经太久了,我不确定 - 如果你需要那么详细的水平,请查看文档)

除此之外:请注意,如果您再次尝试阅读,字符“.8”将保留在流中,您将再次失败。这是一个常见的I / O错误。