首页  >  文章  >  后端开发  >  是什么原因导致“fmt.Scanln Expected Newline”错误以及如何解决它?

是什么原因导致“fmt.Scanln Expected Newline”错误以及如何解决它?

Susan Sarandon
Susan Sarandon原创
2024-10-24 02:07:02923浏览

What Causes

fmt.Scanln Expectation

在Go中使用fmt.Scanln时,可能会遇到错误:“fmt.Scanln预期换行符。”了解此错误及其含义对于调试和编写可靠的代码至关重要。

fmt.Scan 与 fmt.Scanln 的行为

fmt.Scan 读取空格分隔的值来自标准输入,将换行符视为空格字符。这意味着它将继续解析输入,直到所有参数都已填充或发生错误。另一方面,fmt.Scanln 也从标准输入读取,但需要换行符作为终止点。之后的任何输入都不会被解析。

示例

在提供的 Go 代码中,使用 fmt.Scanln 读取字符串 s 时会出现问题。输入包含换行符,该字符会触发 fmt.Scanln 输入结束。然而,后续输入字符“每个人都喜欢冰淇淋”仍然存在,并被后续的 fmt.Scan 消耗。这会导致错误,因为 fmt.Scan 期望在输入末尾有一个换行符。

替代方案

读取包含空格并以换行符结尾的一行文本,考虑使用 bufio.Reader 的 ReadString 方法:

<code class="go">import "bufio"

func main() {
    reader := bufio.NewReader(os.Stdin)
    line, err := reader.ReadString('\n')
}</code>

结论

理解 fmt.Scan 和 fmt.Scanln 的不同行为对于防止错误和写入非常重要符合预期的代码。当读取一行文本时,bufio.Reader 和 ReadString 等替代方案提供了更明确、更高效的解决方案。

以上是是什么原因导致“fmt.Scanln Expected Newline”错误以及如何解决它?的详细内容。更多信息请关注PHP中文网其他相关文章!

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