ホームページ > バックエンド開発 > C++ > C プログラムが数値以外の入力で無限ループに入るのはなぜですか?

C プログラムが数値以外の入力で無限ループに入るのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-10 10:18:11
オリジナル
179 人が閲覧しました

Why Does My C   Program Enter an Infinite Loop with Non-Numeric Input?

数値ではなく文字を入力するとプログラムが無限にループするのはなぜですか?

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 サイトの他の関連記事を参照してください。

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