首页  >  文章  >  后端开发  >  为什么 Go 的 fmt.Scanln 给出“预期换行符”错误?

为什么 Go 的 fmt.Scanln 给出“预期换行符”错误?

DDD
DDD原创
2024-10-24 04:27:31256浏览

Why Does Go's fmt.Scanln Give an

fmt.Scanln 错误:预期换行

在 Go 中使用 fmt.Scanln 函数时,可能会遇到“预期换行”错误。当输入在预期分隔符(通常是空格)之前包含换行符时,就会发生这种情况。为了解决这个问题,让我们深入研究 fmt.Scan 和 fmt.Scanln 的行为。

fmt.Scan 从标准输入中读取空格分隔的值,将换行符视为空格。它将这些值分配给相应的参数,返回成功扫描的项目的计数。

fmt.Scanln 的行为类似,但在换行符处停止扫描。重要的是,输入必须以换行符或 EOF 结尾才能成功完成。

为了说明这一点,请考虑以下输入:

123
123.456
everybody loves ice cream

使用 fmt.Scan 时,输出将为:

read 1 integer:  123
read 1 float64:  123.456
read 1 string:  everybody
Error:  Scan: expected newline

fmt.Scan 将“每个人都喜欢冰淇淋”解释为两个字符串,从而导致错误。

但是,如果您使用 fmt.Scanln 作为相同的输入,则输出将是:

read 1 integer:  123
read 1 float64:  123.456
read 1 string:  everybody loves ice cream

fmt.Scanln 将换行符识别为分隔符,并正确地将整行解析为单个字符串参数。

读取以换行符结尾的行去吧,你可以使用 bufio.Reader 及其 ReadString 方法:

line, err := buffer.ReadString('\n')

以上是为什么 Go 的 fmt.Scanln 给出“预期换行符”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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