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] 删除。
我来说两句