C++ 当输入无效时,函数陷入无限循环

C++ 当输入无效时,函数陷入无限循环,c++,cin,C++,Cin,我想用用户输入的整数填充一个大小为6的数组。它检查输入是否无效,以及数字是否在1到100之间。它工作得很好,除非有一个不是整数的无效输入,在这种情况下,它被困在一个非有效输入的无限循环中。。。我试图用cin.clear解决这个问题;但这似乎没有帮助。我错过了什么 for (int i = 1; i <= 6; i++) { cout << "Please enter number " << i ; while (true) {

我想用用户输入的整数填充一个大小为6的数组。它检查输入是否无效,以及数字是否在1到100之间。它工作得很好,除非有一个不是整数的无效输入,在这种情况下,它被困在一个非有效输入的无限循环中。。。我试图用cin.clear解决这个问题;但这似乎没有帮助。我错过了什么

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