fmt.Scanln 预期换行符错误:了解行为
Go 中的 fmt.Scanln 函数在遇到缺少换行符时会引发错误读取一行输入。与 C 中的 getline 方法不同,此行为是有意为之,并由 fmt.Scanln 的特定实现驱动。
Scan 与 Scanln
fmt.Scan 读取输入空格分隔的值并将它们存储在指定的参数中。换行符被视为空格字符。相反,fmt.Scanln 在换行符处停止扫描,并且在扫描的最后一项之后必须有换行符。这种差异源于它们的预期用途:
错误
当使用 fmt.Scanln 输入后没有换行符时,错误为触发是因为该函数需要换行符来终止该行。错误消息“Scan: Expected newline”表示这种情况。
与 C 中的 getline 比较
C 中的 getline 方法读取一行输入并存储它在提供的字符串变量中。与 fmt.Scanln 不同,getline 不需要在输入末尾添加换行符。这种差异是由于 getline 通常用于读取整行,而 fmt.Scanln 设计用于扫描行内的特定值。
行读取的替代方法
如果需要在 Go 中读取完整的一行输入,可以使用 bufio.Reader 类型的 ReadString 方法:
<code class="go">line, err := buffer.ReadString('\n')</code>
该方法读取输入,直到遇到换行符并存储line 变量中的行。
通过了解 fmt.Scanln 的行为及其与 C 的 getline 方法的区别,您可以有效地使用这些函数来处理 Go 程序中的输入解析。
以上是Scan 与 Go 中的 Scanln:理解预期的换行行为的详细内容。更多信息请关注PHP中文网其他相关文章!