2

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

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

cout << "Please supply...."我已经尝试在 if 语句之前和之后放置 cin.ignore() 和 cin.clear() ,但是在用户输入非整数值(如字符)后,我仍然会出现无限循环 。我怎样才能解决这个问题?

4

1 回答 1

2

你忘记[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');
    }
}

请参阅为什么我们会在读取输入后调用 cin.clear() 和 cin.ignore()?

于 2013-03-02T22:45:16.027 回答