了解Go中的fmt软件包

西班牙语

2输出中来自哪里

我编写了一个程序,该程序从STDIN读取并将值返回到STDOUT。

package main

import "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)
    }
}

我有一个输入文件

2
2 5
4           8

当我运行程序时,go run program.go < input我得到:

2
7
12

代替:

7
12

为什么呢

托马斯·帕德隆·麦卡锡:

经过尝试,事实证明(在我的Linux机器上)如果输入文件为“ Windows格式”,且CRLF行结尾,则它将提供您的性能。如果输入文件为“ Unix格式,且LF行结尾,则按预期方式工作。如果在行末添加垃圾,也将得到相同的行为,例如:

2x
2 5x
4           8x

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章