29

C++ では、間違った入力をどのように処理しますか? 同様に、プログラムが整数を要求する場合、文字を入力すると何かを実行してからループして入力を繰り返すことができますが、整数が必要なときに文字を入力するとループは無限になり、その逆も同様です。

4

4 に答える 4

55

プログラムが無限ループに陥る理由はstd::cin、入力の失敗により の不良入力フラグが設定されているためです。やるべきことは、そのフラグをクリアして、入力バッファから不正な入力を破棄することです。

//executes loop if the input fails (e.g., no characters were read)
while (std::cout << "Enter a number" && !(std::cin >> num)) {
    std::cin.clear(); //clear bad input flag
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //discard input
    std::cout << "Invalid input; please re-enter.\n";
}

これについては C++ FAQを参照してください。また、条件に最小値や最大値を追加するなど、他の例も参照してください。

std::stoi別の方法は、入力を文字列として取得し、変換を確認できる他の方法で整数に変換することです。

于 2012-04-27T11:34:29.053 に答える
-6

入力をテストして、プログラムが期待するものであるかどうかを確認します。そうでない場合は、ユーザーが提供した入力が受け入れられないことをユーザーに警告します。

于 2012-04-27T11:36:43.317 に答える
-6

ASCII 値が 65 t0 90 または 97 から 122 の範囲にある場合は、ASCII 値で確認できます。

于 2012-04-27T11:40:54.887 に答える