问题: 使用 fmt.Scanf() 获取用户输入时,可以有效处理无效输入变得具有挑战性。如果用户输入非数字字符,循环会继续迭代,从而产生不良体验。
解决方案:
要解决此问题,刷新至关重要每个输入请求之后的 stdin(标准输入)。通过这样做,输入缓冲区中任何剩余的无效字符都将被丢弃,确保后续输入请求以干净的状态开始。
使用 fmt.Scanln 的解决方案:
fmt.Scanln 函数可用于从 stdin 读取字符串并自动处理换行符。通过使用 fmt.Scanln,可以简化循环,而不需要显式刷新标准输入:
<code class="go">package main import ( "fmt" ) func main() { fmt.Println("Please enter an integer: ") // Read in an integer var userI int _, err := fmt.Scanln(&userI) if err != nil { fmt.Printf("Error: %s", err.Error()) return } fmt.Println(userI) }</code>
替代解决方案:
在没有内置的情况下stdin 刷新函数,可以采用替代解决方案:
结论:
虽然 Go 中没有内置的 stdin 刷新函数,但使用 fmt.Scanln 或替代解决方案可以有效处理无效输入并保持用户友好的循环。
以上是Go 中 `fmt.Scanf()` 之后如何处理无效输入并刷新标准输入?的详细内容。更多信息请关注PHP中文网其他相关文章!