這是當前困擾着我的一個問題。當從用戶獲取輸入,我想使用一個循環來詢問用戶重試,直到他們進入有效輸入:如何在fmt.Scanf()之後刷新Stdin?
// user_input.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Please enter an integer: ")
var userI int
for {
_, err := fmt.Scanf("%d", &userI)
if err == nil {
break
}
fmt.Println("Sorry, invalid input. Please enter an integer: ")
}
fmt.Println(userI)
}
運行上面的,如果用戶輸入有效輸入,沒有任何問題:
請輸入的整數:
退出代碼0,過程正常退出。
但嘗試輸入一個字符串呢?
請輸入一個整數: 是什麼?
對不起,輸入無效。請輸入一個整數:
對不起,輸入無效。請輸入一個整數:
對不起......
等等,它一直循環字符,直到字符串耗盡。 即使輸入單個字符循環兩次,我假設它分析換行符。
無論如何,必須有一種方法來刷新Stdin的Go?
P.S.在沒有這種功能的情況下,您將如何解決它以提供相同的功能?我甚至沒有在那...
這是一個很好的解決方法。謝謝! –
只使用'Scanln',它被記錄爲消耗空白並閱讀直到換行。 –