ホームページ > バックエンド開発 > C++ > C での未処理の入力型の不一致によって引き起こされる無限ループを防ぐにはどうすればよいですか?

C での未処理の入力型の不一致によって引き起こされる無限ループを防ぐにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-23 15:40:10
オリジナル
987 人が閲覧しました

How Can I Prevent Infinite Loops Caused by Unhandled Input Type Mismatches in C  ?

問題: 未処理の入力タイプの不一致での無限ループ

数値入力を予期するループでは、数値入力が一致しない場合に無限ループが発生する可能性があります。 -数値入力は cin 経由で提供されます。この動作は、cin が入力を処理する方法を理解することで説明できます。

説明:

cin は数値を予期しているときに非数値入力に遭遇すると、失敗状態に入ります。この状態では、cin はさらなる入力のプロンプトを停止し、ユーザー入力を待たずにループが続行されます。

解決策: 入力型エラーの処理

無限大を回避するにはこのような状況ではループが発生するため、入力タイプのエラーを検出して処理することが重要です。 1 つのアプローチは、cin が失敗状態にあるかどうかを確認することです。

if (cin.fail()) {
  cout << "ERROR: Invalid input" << endl;

  // Clear the fail state
  cin.clear();

  // Discard bad input characters (e.g., using numeric_limits or ignore())
}
ログイン後にコピー

失敗状態を処理することで、cin を通常の動作状態にリセットでき、エラーが解決された後もループを続行できるようになります。

追加のテクニック:

より堅牢な入力検証については、次の使用を検討してください。テクニック:

  • 入力を文字列に読み取り、数値型に変換する前にカスタム チェックを実行する。
  • カスタム入力検証関数で正規表現を使用する。
  • ライブラリを使用するBoost.Validation や Validata などの入力検証専用。

以上がC での未処理の入力型の不一致によって引き起こされる無限ループを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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