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