cin检测非数字输入
先来一个简单示例
#include <iostream>
using namespace std;
int main() {
int num;
while (!(cin >> num)) // input terminated by non-numeric response
{
cin.clear(); // reset input
cin.get(); // read an alphabet
}
cin.get(); // read end of line after last input
cout << num;
cin.get(); // wait for user to press <Enter>
return 0;
}
实例解析
错误处理的关键代码
while (!(cin >> num)) {
cin.clear(); // reset input
while (cin.get() != '\n') {
continue; // get rid of bad input
}
cout << "Please enter a number: ";
}
完整代码
// cingolf.cpp -- non-numeric input skipped
#include <iostream>
const int Max = 5;
int main() {
using namespace std;
// get data
int golf[Max];
cout << "Please enter your golf scores.\n";
cout << "You must enter " << Max << " rounds.\n";
int i;
double total = 0.0;
for (int i = 0; i < Max; i++) {
cout << "round #" << i + 1 << ": ";
while (!(cin >> golf[i])) {
cin.clear(); // reset input
while (cin.get() != '\n') continue; // get rid of bad input
cout << "Please enter a number: ";
}
total += golf[i];
}
// report results
cout << total / Max << " = average score " << Max << " rounds\n";
return 0;
}
运行结果
Please enter your golf scores.
You must enter 5 rounds.
round #1: 88
round #2: 87
round #3: must i?
Please enter a number: 103
round #4: 94
round #5: 86
91.6 = average score 5 rounds