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

C プログラムで文字入力により無限ループが発生するのはなぜですか?

DDD
リリース: 2024-12-04 02:37:11
オリジナル
385 人が閲覧しました

Why Does Letter Input Cause an Infinite Loop in My C   Program?

文字を整数入力として受け入れる 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);
ログイン後にコピー

この変更されたコードでは:

  • while ループは do-while ループ内にカプセル化されており、少なくとも最初の入力が無効な場合でも、1 回の実行で済みます。
  • 内部ループ内では、cin.fail() を使用して適切な入力検証が実装されます。
  • 無効な入力が検出された場合、エラー メッセージが表示され、後続の入力試行に影響を与えないように cin バッファがクリアされて無視されます。
  • その後、ユーザーは再入力を求めるプロンプトが表示されます。 -有効な整数を入力してください。
  • このプロセスは、ユーザーが正の整数を入力するまで続行されます。

以上がC プログラムで文字入力により無限ループが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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