数値ではなく文字を入力するとプログラムが無限にループするのはなぜですか?
C プログラムで正の整数を入力しようとするとしかし、誤って代わりに文字を入力すると、無限ループが発生する可能性があります。この動作は、入力ストリーム cin が文字を処理する方法に起因します。
入力が正しくない場合 (数字ではなく文字など)、cin ストリームはフェイルビット フラグを設定し、間違った入力をバッファーに残します。その後、cin を使用して整数を読み取ろうとすると、引き続き間違った入力が返され、無限ループが発生します。
この問題を解決するには、エラーをチェックし、入力バッファをクリアして、間違った入力を適切に処理することが重要です。エラー処理を含むコードの修正バージョンは次のとおりです。
#include <iostream> #include <limits> int main() { // Define variables int num1, num2, total; char answer1; do { // User enters a number cout << "\nPlease enter a positive number and press Enter: "; while (!(cin >> num1)) { cout << "Incorrect input. Please try again." << endl; 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." << endl; } while (num1 < 0); // Rest of the code goes here return 0; }
この更新されたコードでは、有効な整数が入力されるまで while (!(cin >> num1)) ループが実行されます。不正な入力が検出されると、エラー メッセージが表示され、入力バッファは cin.clear() および cin.ignore() を使用してクリアされます。これにより、プログラムはエラーを処理した後も入力を正しく読み続けることができます。
以上がC プログラムが数値以外の入力で無限ループに入るのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。