Go での入力消費を理解する: フラッシュと代替手段
ターミナルを介してユーザーと対話する場合、無効な入力の処理は困難な場合があります。 Go では、fmt.Scanf() を使用して入力を読み取ると、ユーザーが整数以外の値を入力すると問題が発生する可能性があります。これは、fmt.Scanf() が行全体を消費せず、後続の入力を妨げる可能性のある文字が残るためです。
この問題に対処するには、無効なエントリの後に入力バッファを明示的にフラッシュすることが 1 つのオプションです。 。ただし、Go は Stdin をフラッシュするための直接的な方法を提供しません。
代替アプローチ:
<code class="go">fmt.Println("Please enter an integer:") var userI int _, err := fmt.Scanln(&userI) if err != nil { fmt.Println("Sorry, invalid input. Please try again:") }</code>
<code class="go">func GetUserInputInt() int { var userI int for { fmt.Println("Please enter an integer:") _, err := fmt.Scanf("%d", &userI) if err == nil { return userI } fmt.Println("Sorry, invalid input. Please try again:") fmt.Scanln() // Discard invalid input } }</code>
以上がGo で無効なユーザー入力を処理する方法: 標準入力と代替入力をフラッシュするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。