fmt.Scanf() を利用してループ内でユーザー入力を読み取る場合、無効な入力が入力された場合、問題が発生する可能性があります。ユーザーの入力が予想される形式を超えて拡張される場合があり、その結果、ループが複数回繰り返されることになります。これは、fmt.Scanf() が無効な入力を自動的に破棄しないため、無効な入力全体が処理されるまでエラー メッセージが連続して表示されるためです。
標準入力をフラッシュしてこの問題を回避する 1 つの解決策は、fmt.Scanf() の代わりに fmt.Scanln() を使用することです。 fmt.Scanln() は、改行文字を含む入力行全体を読み取るように設計されています。 fmt.Scanln() を利用すると、改行文字に遭遇すると入力プロセスが終了し、標準入力バッファが効果的にクリアされ、後続の入力試行が白紙の状態から開始されるようになります。
これは、fmt.Scanln() を使用してユーザーに整数入力を求め、無効な入力を処理する方法を示す例です。グレースフル:
<code class="go">package main import ( "fmt" ) func main() { fmt.Println("Please enter an integer: ") var input string fmt.Scanln(&input) var number int _, err := fmt.Sscanf(input, "%d", &number) if err != nil { fmt.Println("Invalid input. Please enter an integer: ") return } fmt.Println("You entered:", number) }</code>
この例では、まず fmt.Scanln() を使用してユーザーの入力を文字列として読み取ります。これにより、無効な文字が入力バッファから確実にフラッシュされます。最後に、fmt.Sscanf() を使用して入力文字列を整数として解析しようとします。解析が成功すると、プログラムは解析された整数の使用に進みます。解析が失敗した場合、ユーザーは入力を再入力するよう求められ、以前に入力された可能性のある無効な入力は破棄されます。
fmt.Scanln() を使用してユーザーを読み取るループ内の入力を使用すると、標準入力を効果的にフラッシュし、無効な入力を適切に処理できます。このアプローチは、より堅牢で信頼性の高い入力処理メカニズムを提供し、プログラムが有効な入力を取得するまでユーザーにプロンプトを表示し続けることができるようにします。
以上がGo ループで無効なユーザー入力を処理する方法: fmt.Scanln() が解決策となる理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。