ホームページ  >  記事  >  バックエンド開発  >  Go で無効なユーザー入力を処理する方法: 標準入力と代替入力をフラッシュする

Go で無効なユーザー入力を処理する方法: 標準入力と代替入力をフラッシュする

DDD
DDDオリジナル
2024-10-28 09:04:30640ブラウズ

How to Handle Invalid User Input in Go: Flushing Stdin and Alternatives

Go での入力消費を理解する: フラッシュと代替手段

ターミナルを介してユーザーと対話する場合、無効な入力の処理は困難な場合があります。 Go では、fmt.Scanf() を使用して入力を読み取ると、ユーザーが整数以外の値を入力すると問題が発生する可能性があります。これは、fmt.Scanf() が行全体を消費せず、後続の入力を妨げる可能性のある文字が残るためです。

この問題に対処するには、無効なエントリの後に入力バッファを明示的にフラッシュすることが 1 つのオプションです。 。ただし、Go は Stdin をフラッシュするための直接的な方法を提供しません。

代替アプローチ:

  1. fmt.Scanln() の使用: fmt.Scanln() は、スペースや改行を含む入力行を読み取ります。行全体を消費するため、明示的なフラッシュの必要がなくなります。
<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>
  1. カスタム入力処理: ユーザー入力を読み取り、検証するカスタム関数を作成します。有効な入力が得られるまで無効なエントリを破棄します。
<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 サイトの他の関連記事を参照してください。

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