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

C での間違ったデータ型入力によって引き起こされる無限ループを防ぐにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-21 08:53:09285ブラウズ

How Can I Prevent Infinite Loops Caused by Incorrect Data Type Input in C  ?

C での間違ったデータ型入力の処理

C プログラムを開発する場合、特に特定のデータ型が予想される場合には、ユーザー入力の堅牢な処理を確保することが重要です。データ型。予期された型から逸脱した入力は、無限ループなどのプログラムの誤動作につながる可能性があります。

プログラムがユーザーに整数の入力を求めるが、ユーザーが誤って文字を入力したというシナリオを考えてみましょう。プログラムがこの無効な入力の処理に失敗すると、無限ループに入り、文字を受け取ったにもかかわらず整数を要求し続けます。

この問題の根本的な原因は、std::cin の「不正な入力」の設定です。不正な入力があった場合にフラグを立てます。これを解決するには、このフラグをクリアし、入力バッファから問題のある入力を破棄する必要があります。

次のコード スニペットは、これを実現する方法を示しています。

while (std::cout << "Enter a number" && !(std::cin >> num)) {
    std::cin.clear(); // Clear bad input flag
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Discard input
    std::cout << "Invalid input; please re-enter.\n";
}

このコードでは、 while ループは、入力が失敗する (つまり、文字が読み取られない) 限り実行されます。ループ内で、cin.clear() は不正な入力フラグをクリアし、cin.ignore() はバッファから不正な入力を破棄します。次に、プログラムはユーザーに有効な数値を再入力するよう求めます。

あるいは、入力を文字列として取得し、std::stoi または変換検証が可能な別のメソッドを使用して整数に変換することもできます。このアプローチにより、変換結果を確認し、それに応じて無効な入力を処理できるようになります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。