首先,我是Go编程的新手。我有一个简单的 Golang 程序,它在 Linux 环境中给出了正确的输出,但在我的 Windows 10 PC 中却没有。代码如下:package mainimport ( "bufio" "fmt" "os" "strconv" "strings")func main() { reader := bufio.NewReader(os.Stdin) fmt.Print("Enter text: ") text, _ := reader.ReadString('\n') tarr := strings.Split(strings.Trim(text, "\n"), " ") for i := 0; i < len(tarr); i++ { num, _ := strconv.ParseInt(tarr[i], 10, 32) fmt.Println(num) } fmt.Println(tarr) reader.ReadString('\n')}如果我从终端输入 1 2 3 作为输入,我将在 Windows 10 中得到以下输出(go 版本 go1.12.5 windows/amd64):120]1 2 3我在 Linux Elementary OS 中得到以下输出(go 版本 go1.12.5 linux/amd64)123[1 2 3]谁能解释为什么会发生这种情况?
1 回答
ibeautiful
TA贡献1993条经验 获得超5个赞
UNIX(和 Linux)的行结尾是\n
.Windows 的行结尾是\r\n
. 这意味着您在 Linux 上读到的行是 ,1 2 3\n
而在 Windows 上读到的行是1 2 3\r\n
。如果您现在删除\n
(即strings.Trim(text, "\n")
) 并按空格分割1
,在 Linux 上您会得到 , ,但在 Windows 上您会2
得到, , 。3
1
2
3\r
ParseInt
返回并可能返回一个错误 - 您明确忽略该错误3\r
。这就是为什么在 Windows 上会得到,和0
的输出。此外,Windows 上的数组将打印为. 由于将输出光标设置为当前行的开头并且不会移动到下一行(这就是要做的事情),因此这会有效地用Final覆盖 initial ,从而产生 的可见输出。1
2
0
[1 2 3\r]
\r
\n
[
]
] 1 2 3
- 1 回答
- 0 关注
- 134 浏览
添加回答
举报
0/150
提交
取消