[英]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.