了解 Go 中的输入消耗:刷新和替代方案
通过终端与用户交互时,处理无效输入可能具有挑战性。在 Go 中,当用户输入非整数值时,使用 fmt.Scanf() 读取输入可能会遇到问题。这是因为 fmt.Scanf() 不会消耗整行,留下可能干扰后续输入的残留字符。
要解决此问题,一种选择是在无效输入后显式刷新输入缓冲区。然而,Go 并没有提供直接刷新 Stdin 的方法。
替代方法:
<code class="go">fmt.Println("Please enter an integer:") var userI int _, err := fmt.Scanln(&userI) if err != nil { fmt.Println("Sorry, invalid input. Please try again:") }</code>
<code class="go">func GetUserInputInt() int { var userI int for { fmt.Println("Please enter an integer:") _, err := fmt.Scanf("%d", &userI) if err == nil { return userI } fmt.Println("Sorry, invalid input. Please try again:") fmt.Scanln() // Discard invalid input } }</code>
以上是如何在 Go 中处理无效的用户输入:刷新标准输入和替代方案的详细内容。更多信息请关注PHP中文网其他相关文章!