Go での標準入力 (Stdin) のフラッシュ
Go では、fmt.Scanf() を使用してユーザー入力を読み取る場合、次のことが重要です。ループの問題を防ぐために無効な入力を処理します。よくある課題の 1 つは、無効なエントリの後に入力バッファをクリアできないことで、後続の入力が正しく解析されないことです。これは、Stdin をフラッシュすることで解決できます。
fmt.Scanln()
この問題に対処する 1 つの方法は、完全なデータを読み取る fmt.Scanln() を使用することです。入力からの行。指定された形式指定子の後の残りの入力を消費するため、明示的なループの必要がなくなります。
<code class="go">func someFunc() { fmt.Printf("Please enter an integer: ") // Read in an integer var i int _, err := fmt.Scanln(&i) if err != nil { fmt.Printf("Error: %s", err.Error()) // If int read fails, read as string and forget var discard string fmt.Scanln(&discard) return } fmt.Printf("Input contained %d", i) }</code>
io.Scanf() の使用
または、io.Scanf () を使用すると、不完全であっても、入力から特定の形式を読み取ることができます。入力が形式と一致しない場合、残りの文字は入力バッファーに残ります。このようなエラーの後にバッファをクリアするには、次を使用します。
<code class="go">reader.Reset(reader.Bytes())</code>
reader は io.Reader オブジェクトです。
その他の考慮事項
場合適切な組み込み関数がない場合は、改行に到達するまで入力を継続的に読み取って破棄するカスタム関数の使用を検討してください。このアプローチにより、残りのすべての入力がバッファから確実にクリアされます。
堅牢なユーザー インタラクションには、無効な入力を適切に処理することが不可欠であることを覚えておいてください。
以上が無効な入力を処理するときに Go で標準入力 (Stdin) をフラッシュする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。