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