首页 >后端开发 >Golang >为什么 Go 中 fmt.Scanf 不总是等待用户输入?

为什么 Go 中 fmt.Scanf 不总是等待用户输入?

Barbara Streisand
Barbara Streisand原创
2024-12-19 07:49:09186浏览

Why Doesn't fmt.Scanf Always Wait for User Input in Go?

理解 Go 中 fmt.Scanf 的问题

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn