这是目前困扰我的一个问题。当从用户那里获得输入时,我想使用一个循环来要求用户重试,直到他们输入有效的输入:
// 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)
}
运行上面,如果用户输入有效的输入,没问题:
请输入整数:<br>
3
3
退出代码0,进程正常退出。
但是尝试输入一个字符串呢?
请输入一个整数:<strong>什么?
抱歉,输入无效。请输入一个整数:
对不起,输入无效。请输入一个整数:
对不起...
等等,它会逐个字符地循环,直到字符串用完。即使输入一个字符循环两次,我假设它解析换行符。
无论如何,一定有办法在 Go 中刷新 Stdin?
PS 如果没有这样的功能,您将如何解决它以提供等效的功能?我什至都失败了...