ホームページ > バックエンド開発 > C++ > C で数値以外の値を入力するときに無限ループを防ぐにはどうすればよいですか?

C で数値以外の値を入力するときに無限ループを防ぐにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-13 12:45:10
オリジナル
233 人が閲覧しました

How to Prevent Infinite Loops When Inputting Non-Numeric Values in C  ?

数字の代わりに文字を入力すると無限ループ

整数ではなく文字入力が発生すると、指定されたコードは次の状態に陥ります。 「入力した数値は負の数値です。続行するには正の数値を入力してください。」というメッセージが表示されながら無限ループします。これは次のことが原因で発生します。

問題:

無効な入力 (この場合は文字) が発生すると、cin ストリームが適切に処理されません。これにより、ストリームが「フェイルビット」フラグが設定されているという誤った状態のままになります。

解決策:

この問題を解決するには、次の手順を実行します。

  • 数値を読み取るときに入力が成功したかどうかを確認します (ストリーム操作演算子で cin を使用) >>):

    while (!(cin >> num1)) {
        cout << "Incorrect input. Please try again.\n";
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    ログイン後にコピー
  • cin が失敗した場合はストリームをクリアし、誤った入力文字を無視します (clear() とignore() を使用):

    • cin.clear() は「フェイルビット」をクリアしますflag.
    • cin.ignore(numeric_limits::max(), 'n') は、次の改行文字 ('n') までのすべての文字をストリーム バッファから削除します。

これらの手順を実装すると、プログラムは無効な入力を検出し、ストリームをクリアし、ユーザーにプロンプ​​トを表示します。正の整数を入力すると、無限ループにならずにプログラムを続行できるようになります。

以上がC で数値以外の値を入力するときに無限ループを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート