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中文網其他相關文章!