查了很多,没有一个完美方案,于是自己写了一个。不仅能够处理所有错误输入情况(应该没有其它错误情况了吧),还能继续输入直到成功的方案:
void getInput(int* num) {
std::string str;
std::getline(std::cin, str);
try {
if (str.find('.') != str.npos) throw 1; // 处理小数的输出
for (int i = 0; i < str.size(); i++) { // 处理含有非数字输入
if ((str[i] < 48 || str[i] > 57) && !(i == 0 && str[i] == '-')) {
throw 2;
}
}
if (str[0] == '0' && str.size() != 1) throw 3; // 处理0开头的非0输入
// 输入正确,返回该整数
*num = atoi(str.c_str());
}
catch (int) {
std::cout << "*****输入类型错误*****\n请输入整数:";
getInput(num);
}
}