C++实现int输入校验时需重复输入两次的问题如何解决
问题根因
- 代码连续执行了两次
cin >> i读取操作:- 输出输入提示后第一行
cin >> i;已经完成了一次用户输入读取 - 紧接着if判断条件内又写了一次
cin >> i,会再次要求用户输入,因此合法输入场景下必须输两次才能通过校验
- 输出输入提示后第一行
- 非法输入场景下第一次读取就会将输入流置为失败状态,if内的第二次读取直接返回失败,所以你之前的非法输入校验逻辑看起来能正常运行,但本身存在冗余错误。
修正方案
删掉冗余的读取逻辑即可,以下是两种可行实现方式:
方案1:将读取逻辑合并到判断条件内
#include <iostream> // 补充system函数依赖的头文件,避免部分编译环境报错 #include <cstdlib> using namespace std; int main() { int i; char x; RETRY: cout << "请输入一个整数: "; // 单次读取同时做校验 if(!(cin >> i)){ cin.clear(); cin.ignore(10000, '\n'); cout << "错误!请输入有效整数!" << endl; cout << "输入任意字符继续: "; cin >> x; system("clear"); goto RETRY; } cout << "输入成功!"; return 0; }
方案2:读取后单独判断输入流状态
#include <iostream> #include <cstdlib> using namespace std; int main() { int i; char x; RETRY: cout << "请输入一个整数: "; cin >> i; // 直接判断cin的状态,不需要再次读取 if(!cin){ cin.clear(); cin.ignore(10000, '\n'); cout << "错误!请输入有效整数!" << endl; cout << "输入任意字符继续: "; cin >> x; system("clear"); goto RETRY; } cout << "输入成功!"; return 0; }
内容的提问来源于stack exchange,提问作者Aidan Latno
相关产品推荐
相关产品推荐

