在 Go 中,fmt.Scanf 函数允许您读取用户输入并将其存储在指定的变量中。然而,有时用户会遇到一个问题,即 fmt.Scanf 在第一次扫描后不等待用户输入,而是立即转到后续提示。
在 Go 中,fmt.Scanf 读取从标准输入到第一个分隔符(通常是换行符)的字符。在 Go 的早期版本中,它不认为回车符 (r) 后跟换行符 (n) 作为 Windows 系统上的有效分隔符。这导致 fmt.Scanf 在读取用户输入的第一个字符后过早结束。
要解决此问题,一个简单的解决方法是在格式字符串中显式使用 n 分隔符传递给 fmt.Scanf。例如:
var inputSquare float64 fmt.Scanf("%f\n", &inputSquare)
通过在格式字符串中包含 n,您可以告诉 fmt.Scanf 在考虑输入完成之前等待换行符。这可确保程序暂停,直到用户按 Enter 并完成输入。
要验证用户输入的整数,您可以使用 strconv.ParseInt 函数,该函数检查是否输入的字符串可以解析为整数并返回遇到的任何错误。例如:
inputSquare, err := strconv.ParseInt(inputSquareString, 10, 64) if err != nil { // Handle error }
通过使用上述技术,可以有效解决 Go 中 fmt.Scanf 不等待用户输入的问题,并实现正确的整数输入验证。
以上是为什么 Go 中 fmt.Scanf 不总是等待用户输入?的详细内容。更多信息请关注PHP中文网其他相关文章!