代码之家  ›  专栏  ›  技术社区  ›  LazerSharks

使用cin检查用户整数输入会产生无限循环

  •  2
  • LazerSharks  · 技术社区  · 13 年前

    如果用户没有在输入提示中输入任何内容,并且输入的内容为零或更少,我将尝试打印一条错误消息。

    void checkScoreInputed(int* qaltScores, int i){
        while(true){
            // cin.clear(); here?
            if ((cin >> qaltScores[i]) && (qaltScores > 0)){
                // also tried placing cin.clear() here. 
                break;} else // else is optional
            cout << "Please supply a positive number for the score: ";
        }
    }
    

    我已经尝试将cin.ignore()和cin.clear()放在if语句之前和之后,但我仍然得到了 cout << "Please supply...." 在用户输入非整数值(如字符)之后。我该怎么解决这个问题?

    1 回复  |  直到 13 年前
        1
  •  2
  •   Community Mohan Dere    8 年前

    你忘了 [i] 在里面

    if ((cin >> qaltScores[i]) && (qaltScores[i] > 0))
                                             ^^^
    

    没有它,您检查的是指针的值,而不是刚刚读取的数字。

    你还需要打电话 cin.clear() cin.ignore() .

    void checkScoreInputed(int* qaltScores, int i) {
        while(true) {
            if ((cin >> qaltScores[i]) && (qaltScores[i] > 0)){
                break;
            }
            cout << "Please supply a positive number for the score: ";
            cin.clear();
            cin.ignore(10000,'\n');
        }
    }
    

    看见 Why would we call cin.clear() and cin.ignore() after reading input?