首頁 > 後端開發 > Golang > Go 中 `fmt.Scanf()` 之後如何處理無效輸入並刷新標準輸入?

Go 中 `fmt.Scanf()` 之後如何處理無效輸入並刷新標準輸入?

Susan Sarandon
發布: 2024-10-27 07:26:28
原創
355 人瀏覽過

How to Handle Invalid Input and Flush Standard Input After `fmt.Scanf()` in Go?

Go 中fmt.Scanf() 之後刷新Stdin

問題: 使用fmt.Scanf() 取得使用者輸入時,可以有效處理無效輸入變得具有挑戰性。如果使用者輸入非數字字符,循環會繼續迭代,從而產生不良體驗。

解決方案:

要解決此問題,刷新至關重要每個輸入請求之後的 stdin(標準輸入)。透過這樣做,輸入緩衝區中任何剩餘的無效字元都將被丟棄,確保後續輸入請求以乾淨的狀態開始。

使用 fmt.Scanln 的解決方案:

fmt.Scanln 函數可用於從 stdin 讀取字串並自動處理換行符。透過使用fmt.Scanln,可以簡化循環,而不需要明確刷新標準輸入:

<code class="go">package main

import (
    "fmt"
)

func main() {
    fmt.Println("Please enter an integer: ")

    // Read in an integer
    var userI int
    _, err := fmt.Scanln(&userI)
    if err != nil {
        fmt.Printf("Error: %s", err.Error())
        return
    }
    fmt.Println(userI)
}</code>
登入後複製

替代解決方案:

在沒有內建的情況下stdin 刷新函數,可以採用替代解決方案:

  • 使用io.Discard: io.Discard 值可以傳遞給fmt.Scanf() 以丟棄無效輸入。
  • 結合fmt.Scanf() 和bufio: 透過將fmt.Scanf() 與bufio 套件結合,可以利用ReadString() 函數讀取整行輸入,丟棄無效的內容

結論:

雖然Go 中沒有內建的stdin 刷新函數,但使用fmt.Scanln 或替代解決方案可以有效處理無效輸入並保持用戶友好的循環。

以上是Go 中 `fmt.Scanf()` 之後如何處理無效輸入並刷新標準輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板