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

C で整数入力を受け取るときに無限ループを防ぐにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-03 04:23:10745ブラウズ

How to Prevent Infinite Loops When Taking Integer Input in C  ?

文字入力での無限ループの問題

提供されたコードを実行すると、代わりに非整数文字が入力されると無限ループが発生します。数字。この動作は、正の数の検証プロセス中に発生します。

特に、問題は num1 の有効性をチェックする内部 while ループ内にあります。文字が入力された場合、cin >> num1 ステートメントが失敗し、failbit フラグが設定されます。ただし、cin バッファはクリアされないため、同じ無効な入力が継続しているという誤った想定が生じます。

問題の解決

この問題に対処するには、追加のロジックが次のとおりです。無効な入力を処理し、cin バッファをクリアするために必要です:

    do {    
        while(!(cin >> num1)) {
            cout << "Incorrect input. Please try again.\n";
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }
        if(num1 < 0) cout << "The number you entered is negative. Please enter a positive number to continue.\n";
    } while(num1 < 0);

この変更されたコードでは、外側の do-while ループが使用されて継続的に実行されます。有効な正の整数が入力されるまで、入力を求めるプロンプトが表示されます。

無効な文字が入力された後、cin.clear() が呼び出され、フェイルビット フラグがリセットされます。その後、cin.ignore() を使用して、無効な文字とその後に続く空白文字または改行文字を含む、入力バッファーからの残りの文字をすべて破棄します。 numeric_limits::max() 引数は、次の改行までのすべての文字が無視されることを指定します。

これらの調整により、コードは有効な整数入力のみが処理され、そうでない場合に無限ループが回避されるようになります。整数文字が入力されています。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。