1
    int value(0);
    while (!(std::cin >> value)) { //THIS LINE RIGHT HERE IS BUGGING ME(am really a noob)
        cout << "you entered a non-digit character\n";
        cin.clear();
        cin.ignore();
    }

これは、人々が数字の代わりに文字を入力するのを止めるだけですが、それがどのように行われるか知りたいです

4

4 に答える 4

2

cinブール値として扱うと、失敗状態かどうかがわかります。if ( cin )の省略形ですif ( cin.ok() )。そのため、何らかの入力を取得した後、入力ストリームが OK でない限り、ループは継続します。

不正な入力を取得することは、失敗状態になる 1 つの方法です。状態から抜け出すには を呼び出しclear()、問題のある入力を無視するには を呼び出しますignore()。その後、このループのように、もう一度試すことができます。

于 2013-10-02T23:18:23.033 に答える
1

受け取ったもののcinデータ型が と互換性がない場合valueは、基本的に false を返します。

于 2013-10-02T22:43:09.630 に答える
0

cin >> valuecin結果としてオブジェクトを返します。またfalse、ユーザーが入力した型が特定のオーバーロード (コードではint) と一致しないか、暗黙的に変換できないかのように評価されます。

于 2013-10-02T22:48:04.427 に答える
0

cinistream標準入力ストリームを表すクラスのオブジェクトです。cstdioストリームに対応していますstdin

operator >>ストリームのオーバーロードは、同じストリームへの参照を返します。これは、変換演算子を介して、ストリームの内部状態に基づいて、trueまたはブール条件で評価できます。フォーマットされたストリーム抽出を提供します。falsecin

操作

int value;
!(std::cin >> value)

数値が入力された場合は失敗し、数値以外の値が入力された場合は true を返します。

    cin.clear(); // will reset the state of stream
    cin.ignore(); // ignore one or more characters
于 2013-10-02T22:49:11.540 に答える