C++代码运行时持续出现无限循环,请问具体触发原因是什么?
C++代码无限循环根因与修复方案
你提供的问题代码核心逻辑如下:
#include <iostream> using namespace std; int main() { int num; while (num != 5) { cout << "请输入一个数字:"; cin >> num; if (num < 5) { cout << "太小了" << endl; } else if (num > 5) { cout << "太大了" << endl; } } cout << "猜对了!" << endl; return 0; }
无限循环根因
- 输入类型不匹配触发输入流异常:当向
int类型变量num输入非数字字符时,cin会进入失败状态,内部failbit标识被置位,后续所有cin操作都会直接跳过,不会修改num的取值,导致循环判断条件num != 5永远成立。 - 缺少输入异常处理逻辑:输入失败后没有清除错误标识,也没有清空输入缓冲区中残留的非法字符,每次循环都会读取到相同的非法内容,重复触发输入失败。
修复方案
每次输入后增加输入有效性校验,异常时先清除错误标识再清空缓冲区残留内容,修复后代码如下:
#include <iostream> #include <limits> using namespace std; int main() { int num = 0; // 初始化变量避免未定义行为 while (num != 5) { cout << "请输入一个数字:"; cin >> num; if (cin.fail()) { cout << "输入非法,请输入整数!" << endl; cin.clear(); // 清除输入流错误标识 // 清空输入缓冲区所有残留内容,直到遇到换行符 cin.ignore(numeric_limits<streamsize>::max(), '\n'); continue; } if (num < 5) { cout << "太小了" << endl; } else if (num > 5) { cout << "太大了" << endl; } } cout << "猜对了!" << endl; return 0; }
内容的提问来源于stack exchange,提问作者JHunterJoe
相关产品推荐
相关产品推荐

