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

ifステートメントの前後にcin.ignore()とcin.clear()を配置しようとしましたが cout << "Please supply...."、ユーザーが文字などの非整数値を入力した後、無限ループが発生します。どうすればこれを修正できますか?

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 に答える