使用fmt.Scanf() 循環讀取用戶輸入時,如果輸入無效輸入,它可能會遇到問題。使用者的輸入可能超出預期的格式,導致循環的多次迭代。這是因為 fmt.Scanf() 不會自動丟棄無效輸入,導致連續的錯誤訊息流,直到處理整個無效輸入為止。
刷新標準輸入並避免此問題的解決方案之一是使用 fmt.Scanln() 而不是 fmt.Scanf()。 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中文網其他相關文章!