文字入力での無限ループの問題
提供されたコードを実行すると、代わりに非整数文字が入力されると無限ループが発生します。数字。この動作は、正の数の検証プロセス中に発生します。
特に、問題は 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 これらの調整により、コードは有効な整数入力のみが処理され、そうでない場合に無限ループが回避されるようになります。整数文字が入力されています。 以上がC で整数入力を受け取るときに無限ループを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。