繁体   English   中英

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

[英]Behaviour of std::cin when used in while loop condition C++

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

#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: 

不应该有任何铸造。

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

如果您希望处理10.8 ,请阅读double ,然后自己进行投射。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM