我试图在没有tryCatch-Block的情况下捕获错误的输入。每当用户输入错误的值(例如'hh'或-5)时,我的程序将再次询问,直到用户键入正确的值。然后继续,直到阵列已满。
int main() {
double array[6];
string str_array[7];
str_array[0] = "stringA";
str_array[1] = "stringB";
str_array[2] = "stringC";
str_array[3] = "StringD";
str_array[4] = "StringE";
str_array[5] = "StringF";
str_array[6] = "StringG";
double value;
for (int i = 0; i < 7; i++) {
bool exit = false;
while (!exit) {
cout << str_array[i] << ":";
if (cin >> value&& value> 0) {
array[i] = value;
cout << array[i] << endl;
exit = true;
} else {
cerr << "incorrect input" << endl;
cin.clear();
}
}
}
}
答案 0 :(得分:1)
cin.clear();
还不够。您还需要使用被拒绝的输入来同步新输入:
else {
cerr << "incorrect input" << endl;
cin.clear();
std::string dummy; // <<<<<
cin >> dummy; // <<<<<
}
否则你只会一遍又一遍地阅读被拒绝的输入。
像cin.ignore(numeric_limits<streamsize>::max(), '\n')
之类的东西也可以为你服务。
子>