c++中while循环条件中使用std::cin的行为

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

本文关键字:cin std while 循环 条件 c++      更新时间:2023-10-16

下面是一个小程序,它将刚刚输入的整数打印到屏幕上。

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

在"You键入10"行后,字符"。"留在小溪里。"当它试图将其读入整数时,它失败了,因此它将流置于坏状态。

由于流处于坏状态,你的循环条件失败,你退出循环。

(具体来说,它设置了"坏"位,我想,但我已经处理了太长时间了,我不确定——如果你需要那个级别的细节,请检查文档)

旁白:注意,如果你试图再次阅读,字符"。8" 将仍然留在流中,并且您将再次失败。这是一个常见的I/O错误。

不应该有任何类型转换。

10.8被读取为10,然后.导致无法将文本解释为整数,导致设置failbit。这将导致循环退出。

如果您希望处理10.8,请阅读double,并自己进行强制转换。