为了账号安全,请及时绑定邮箱和手机立即绑定

了解 go 中的 fmt 包

了解 go 中的 fmt 包

Go
HUX布斯 2021-09-10 15:31:58
2输出中的来自哪里?我编写了一个从 STDIN 读取并将值返回到 STDOUT 的程序。package mainimport "fmt"func main() {    var steps, i, a, b int    fmt.Scanf("%d", &steps)    for i = 0; i <= steps; i++ {        fmt.Scanf("%d", &a)        fmt.Scanf("%d", &b)        fmt.Println(a + b)    }}我有一个输入文件22 54           8当我运行程序时,go run program.go < input我得到:2712代替:712为什么 ?
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

尝试过之后,结果证明(在我的 Linux 机器上)如果输入文件是“Windows 格式”,并且以 CRLF 行结束,它会给出你的行为。如果输入文件是“Unix 格式,以 LF 行结束,它会按预期工作。如果在行尾添加垃圾,您也会得到相同的行为,例如像这样:


2x

2 5x

4           8x

所以它似乎没有将 CR 识别为空白字符,可以通过“%d”格式说明符跳过它,并在找到它时停止读取,就像我上面例子中的 x 一样。


我认为这应该称为错误。这当然很不方便,因为在 Linux 上工作时遇到碰巧具有 Windows 风格行尾的文本文件并不少见。


查看完整回答
反对 回复 2021-09-10
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

i <= steps应该是i < steps


查看完整回答
反对 回复 2021-09-10
  • 2 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信