2

プログラムがブール変数を要求するときに、ユーザーを0または1のみに制限したいと考えています。私たちはそうしようとしましたが、うまくいきません。それはまだ私に入力を求め続けます.

bool ele;
do{ 
    cout << "Elektro:\t"; 
    cin >> ele; 
    if (cin && ele == 0 && ele == 1) break;
    cin.clear();
    cout << "Neveljaven vnos!" << endl;
}while(true);
4

3 に答える 3

6

幸いなことoperator>>bool、デフォルトでは、有効な入力のみ'0'または'1'有効な入力として許可されます。つまり、読み取り後に値を明示的にチェックする必要はありません。ストリームの状態に問題がない場合は、次のようになりますbool

bool ele;
if (!(cin >> ele)) {
    // error;
}

のようなものを入力したときに無限ループが発生する理由は"cvdsavd"、エラーフラグをクリアするだけで、不正な文字を削除しないためです。したがって、ループは試行を続けますが、有効な入力を取得することはできません。あなたはゴミを取り除く必要があります:

bool ele;
while (!(std::cin >> ele)) {
    std::cout << "Neveljaven vnos!\n";
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

のリファレンスignore()。テンプレート<limits>にも含める必要があります。numeric_limits

Lp :)

于 2012-12-10T11:41:41.330 に答える
3

クリスが指摘するように、あなたはしたいif (cin && (ele == 0 || ele == 1)) break;

于 2012-12-10T11:05:21.300 に答える
0

あなたはそれをすることはできません:

if (cin && ele == 0 && ele == 1) break;

eleは同時に1または0になることができないため、常にfalseであるため...この数字の1つのみである可能性があります。

if(ele == 0 || ele == 1) break;
于 2012-12-10T11:06:34.467 に答える