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

Golang 程序在 Windows 10 中给出错误结果

Golang 程序在 Windows 10 中给出错误结果

Go
跃然一笑 2023-06-26 15:04:52
首先,我是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得到, , 。3123\r

ParseInt返回并可能返回一个错误 - 您明确忽略该错误3\r。这就是为什么在 Windows 上会得到,和0的输出。此外,Windows 上的数组将打印为. 由于将输出光标设置为当前行的开头并且不会移动到下一行(这就是要做的事情),因此这会有效地用Final覆盖 initial ,从而产生 的可见输出。120[1 2 3\r]\r\n[]] 1 2 3


查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

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