【问题标题】:Function gets stuck in infinite loop when input is invalid [duplicate]当输入无效时,函数陷入无限循环[重复]
【发布时间】:2018-05-19 15:57:09
【问题描述】:

我想用来自用户输入的整数填充一个大小为 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: ";
        }   
    }

【问题讨论】:

    标签: c++ cin


    【解决方案1】:

    您需要使用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
    

    【讨论】:

      猜你喜欢
      • 2013-10-29
      • 1970-01-01
      • 2013-05-28
      • 2017-12-05
      • 2021-12-17
      • 1970-01-01
      • 2020-05-13
      相关资源
      最近更新 更多