Go ループで無効なユーザー入力を処理する方法: fmt.Scanln() が解決策となる理由

Susan Sarandon
リリース: 2024-10-31 18:25:02
オリジナル
961 人が閲覧しました

How to Handle Invalid User Input in Go Loops: Why fmt.Scanln() is the Solution?

有効なユーザー応答のために Go で入力をフラッシュする

問題を理解する

fmt.Scanf() を利用してループ内でユーザー入力を読み取る場合、無効な入力が入力された場合、問題が発生する可能性があります。ユーザーの入力が予想される形式を超えて拡張される場合があり、その結果、ループが複数回繰り返されることになります。これは、fmt.Scanf() が無効な入力を自動的に破棄しないため、無効な入力全体が処理されるまでエラー メッセージが連続して表示されるためです。

fmt.Scanln() による問題への対処

標準入力をフラッシュしてこの問題を回避する 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート