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

时间:2013-03-02 22:42:19

标签: c++ error-handling user-input cin

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

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: ";
    }
}

我尝试在if语句之前和之后放置cin.ignore()和cin.clear(),但在用户输入非整数值后,我仍然得到cout << "Please supply...."的无限循环,就像一个角色。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您忘记了<{p>}中的[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?