首頁 >後端開發 >Golang >Go 中處理無效輸入時如何刷新標準輸入(Stdin)?

Go 中處理無效輸入時如何刷新標準輸入(Stdin)?

Linda Hamilton
Linda Hamilton原創
2024-10-29 02:32:30320瀏覽

How to Flush Standard Input (Stdin) in Go When Dealing with Invalid Inputs?

Go 中的刷新標準輸入(Stdin)

在Go 中,當使用fmt.Scanf() 讀取使用者輸入時,至關重要處理無效輸入以防止循環問題。一個常見的挑戰是在輸入無效條目後無法清除輸入緩衝區,導致後續輸入無法正確解析。這可以透過刷新 Stdin 來解決。

fmt.Scanln()

解決此問題的一種方法是使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn