文字を整数入力として受け入れる C プログラムの無限ループの問題
この問題は、プログラムが整数入力を予期しているのに、ユーザーが入力した場合に発生します。代わりに手紙を。入力ストリーム内の予期しない文字により、プログラムが無限ループに入ります。その結果、「入力した数値は負の数値です。続行するには正の数値を入力してください。」というメッセージが継続的に表示されます。ユーザーに有効な数値を入力する機会を与えません。
説明
この問題の根本的な理由は、C 入力ストリームの動作にあります。ユーザーが数字以外の文字を入力すると、入力ストリームの「failbit」フラグが設定されます。ただし、ストリームはクリアされないため、プログラムは同じループ反復でスタックしたままになり、無効な文字を繰り返し読み取ろうとします。
解決策
この問題を解決するには、適切な入力検証とエラー処理を実装する必要があります。この問題に対処する方法の例を次に示します。
#include <iostream> #include <limits> // ... (remaining code) cout << "\nPlease enter a positive number and press Enter: \n"; 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);
この変更されたコードでは:
以上がC プログラムで文字入力により無限ループが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。