这是当前困扰着我的一个问题。当从用户获取输入,我想使用一个循环来询问用户重试,直到他们进入有效输入:如何在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',它被记录为消耗空白并阅读直到换行。 –