输入浮点数时为何这段C++代码陷入无限循环?
输入浮点数时C++程序陷入无限循环的原因分析
问题场景
现有一段用于检测负数输入的C++程序,输入整数时运行正常,但输入浮点数会陷入无限循环,程序代码如下:
#include<iostream> using namespace std; int main(){ int positive = 0; while(positive>=0){ cout<<"Enter number"; cin>> positive; if (positive<0){ cout<<"yes it is negative"; } } return 0; }
原因解释
- 当输入浮点数(比如
3.14)时,cin尝试将其存入int类型的变量positive,只会提取整数部分(这里是3)存入变量,剩下的.14会留在输入缓冲区中。 - 下一次循环执行时,
cin会直接读取缓冲区里残留的.14,但.14不是有效的整数格式,导致cin读取失败并进入错误状态。 - 一旦
cin进入错误状态,后续所有的输入操作都会直接跳过,变量positive的值会保持之前的3(仍然满足>=0的循环条件),循环会一直重复执行,无限输出"Enter number"。 - 程序没有处理输入错误的逻辑,既没有清除
cin的错误状态,也没有清空输入缓冲区里的无效内容,因此无法跳出循环。
内容的提问来源于stack exchange,提问作者Harsh Sutariya
相关产品推荐
相关产品推荐

