0

ループが発生し、int 型の入力を求める最初のプロンプトが表示されますが、!(cin >> [変数]) でチェックする while ループとは何ですか? 説明のために cplusplus.com の cin を見ましたが、値が保持されていません...入力された数値の数値をチェックしているように見えますが、有効な整数入力をどのようにチェックしますか?

int number;
.
.
.
    cout<<"Please enter a number: ";
    while (!(cin >> number))
    {
        cin.clear();
        cin >> badinput;
        cout <<"Input " << badinput << " is invalid, please enter a number: ";
    }
4

2 に答える 2

1

operator >>入力ストリームでは、ストリームから読み取ったものではなく、ストリームへの参照を返します。読み取られた値は、引数が参照するものに配置されます。これは左辺値でなければなりません。

iostreamの!オペレーターは、ストリームの失敗フラグをテストします。ストリームに何らかの失敗があった場合、true を返します。入力ストリームの場合、(このコードが行っているように) 整数を読み取ろうとして、入力が整数のように見えない場合、失敗フラグが設定されます。

したがって、このコードは整数を読み取って (試行し) number、失敗フラグをテストします。設定されている場合は、失敗フラグをクリアし、badinput(おそらく文字列) を読み取り、メッセージを出力してループし、別の整数を読み取ろうとします。

したがって、唯一の失敗が書式設定にある限り、整数を取得するまでループします。他の永続的な障害が発生した場合 (たとえば、cin が EOF を取得した場合や閉じられた場合)、永久にループします。

于 2012-11-28T01:04:11.767 に答える
-1

正の数が入力されているかどうかをチェックするように見えます。正の数はtrueになり、!numberfalseになり、ループをスキップします。入力されたのが正の数でない場合、それはfalseになり、!numbertrueになってループに入ります。

于 2012-11-28T00:09:43.227 に答える