堅牢なエラー処理による数値入力の確保
C プログラミングでは、標準入力ストリーム (cin) はユーザー入力を読み取るための多用途ツールです。 。ただし、入力が数値のみであることを保証するには、追加の対策が必要です。
数値入力を検証する 1 つのアプローチには、有効な数値が入力されるまでユーザーに繰り返しプロンプトを表示するループの使用が含まれます。問題の説明で提供されているコードはこの手法を採用しており、cin.fail() を使用して入力エラーをチェックします。無効な入力があった場合、バッファがクリアされ、ユーザーに数値の再入力を求められます。
ただし、このアプローチには潜在的な制限があります。ユーザーが部分的に有効な数値 (「1x,」など) を入力した場合、 " "1" 部分は入力として受け入れられ、"x" 文字はバッファーに残ります。これにより、後続の入力操作で予期しない動作が発生する可能性があります。
この問題に対処するためのより堅牢なアプローチには、std::getline() を使用して入力行全体を文字列として読み取ることが含まれます。その後、std::stringstream を使用して行全体を倍精度浮動小数点数に変換できます。変換が成功した場合 (ss.eof() のチェックで確認)、入力は有効であるとみなされ、ループを終了できます。
この強化されたエラー処理を組み込んだコードの修正バージョンを次に示します。 :
#include <string> #include <sstream> double enter_number() { std::string line; double number; while (true) { std::getline(std::cin, line); std::stringstream ss(line); if (ss >> number) { if (ss.eof()) { return number; } } std::cout << "Invalid input, please enter a numerical value: "; } }
このコードは、末尾の文字を含まない有効な実数のみが入力として受け入れられることを保証します。有効な入力が提供されるまでユーザーに繰り返しプロンプトを表示し、より堅牢でユーザーフレンドリーなエクスペリエンスを提供します。
以上が部分的な入力エラーを防ぐために C で数値入力を確実に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。