这是一个困扰我的问题.当从用户获得输入时,我想使用循环来要求用户重试,直到他们输入有效输入:
// 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)
}
Run Code Online (Sandbox Code Playgroud)
运行以上操作,如果用户输入有效输入,没问题:
请输入一个整数:
3
3
退出代码0,正常退出流程.
但是尝试输入一个字符串呢?
请输入一个整数:
什么?
对不起,输入无效.请输入一个整数:
抱歉,输入无效.请输入一个整数:
抱歉......
等等,它会逐个字符循环,直到字符串用完为止.即使输入一个字符循环两次,我假设它解析换行符.
无论如何,必须有一种方法在Go中冲洗Stdin?
PS如果没有这样的功能,您将如何解决它以提供相同的功能?我甚至都失败了......