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 风格行尾的文本文件并不少见。
- 2 回答
- 0 关注
- 157 浏览
添加回答
举报
0/150
提交
取消