这是一个小型的程序,它打印刚刚输入到屏幕的整数。
#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:
答案 0 :(得分:5)
不应该有任何演员。
10.8被读作10
,然后.
导致无法将文本解释为整数,从而导致failbit
被设置。这反过来会导致你的循环退出。
如果您希望处理10.8
,请阅读double
,并自行投标。
答案 1 :(得分:5)
在“您输入10”行后,字符“.8”保留在流中。当它尝试将其读入整数时,它会失败,因此它会将流置于错误状态。
由于流处于错误状态,因此循环条件失败,您将退出循环。
(具体来说,它设置了“坏”位,我想,但是由于我处理了这个问题已经太久了,我不确定 - 如果你需要那么详细的水平,请查看文档)
除此之外:请注意,如果您再次尝试阅读,字符“.8”将仍保留在流中,您将再次失败。这是一个常见的I / O错误。