C++ 当输入无效时,函数陷入无限循环
我想用用户输入的整数填充一个大小为6的数组。它检查输入是否无效,以及数字是否在1到100之间。它工作得很好,除非有一个不是整数的无效输入,在这种情况下,它被困在一个非有效输入的无限循环中。。。我试图用cin.clear解决这个问题;但这似乎没有帮助。我错过了什么C++ 当输入无效时,函数陷入无限循环,c++,cin,C++,Cin,我想用用户输入的整数填充一个大小为6的数组。它检查输入是否无效,以及数字是否在1到100之间。它工作得很好,除非有一个不是整数的无效输入,在这种情况下,它被困在一个非有效输入的无限循环中。。。我试图用cin.clear解决这个问题;但这似乎没有帮助。我错过了什么 for (int i = 1; i <= 6; i++) { cout << "Please enter number " << i ; while (true) {
for (int i = 1; i <= 6; i++) {
cout << "Please enter number " << i ;
while (true) {
cin >> numbers[i];
if (!cin.fail() && 101 > numbers[i] && 0 < numbers[i])
break;
cin.clear();
cout << "Not a valid input -- please repeat: ";
}
}
您需要使用cin.sync清除cin缓冲区
代码如下:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main(int argc, char const *argv[])
{
int numbers[7];
for (int i = 1; i <= 6; i++) {
cout << "Please enter number " << i << ": ";
while (true) {
cin >> numbers[i];
if (cin && 101 > numbers[i] && 0 < numbers[i])
break;
cin.clear();
cin.sync();
cout << "Not a valid input -- please repeat: ";
}
}
for (int i = 1 ;i <= 6 ;++i)
cout << numbers[i] <<" ";
cout << endl;
return 0;
}
$ g++ test.cpp -o test && ./test
Please enter number 1: 1
Please enter number 2: a
Not a valid input -- please repeat: a
Not a valid input -- please repeat: 2
Please enter number 3: 3
Please enter number 4: 5
Please enter number 5: 6
Please enter number 6: 7
1 2 3 5 6 7