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

从 stdin 读取到 int 的字符串的类型转换给我一个 0

从 stdin 读取到 int 的字符串的类型转换给我一个 0

Go
千巷猫影 2023-06-12 10:53:58
代码:reader := bufio.NewReader(os.Stdin)fmt.Print("Enter a number")input,_ := reader.ReadString('\n')fmt.Printf("Type of the entered value is %T\n",input)fmt.Println(input)out,_ := strconv.Atoi(input)fmt.Printf("Type now is: %T\n", out)fmt.Printf("Value now is %d\n",out)fmt.Println(out)Golang 的完全初学者。我试图解决来自 r/dailyprogrammer 的问题之一。我用代码片段读取了来自 SO 的输入,以及 strconv.Atoi 函数。这个函数的例子很有意义,但是当我将它应用到我从标准输入读取的输入时,它给了我 0。
查看完整描述

1 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

如果稍微更改一下代码,您会发现它strconv.Atoi(input)返回了一个错误。我希望您现在已经学到了关于 Go 如何进行错误处理的重要一课。


错误是:strconv.Atoi: parsing "1\n": invalid syntax


out, err := strconv.Atoi(input)

if err != nil {

    fmt.Printf("Error is: %v\n", err)

}

解决此问题的一种方法是input使用strings.TrimSuffix()进行修剪:


reader := bufio.NewReader(os.Stdin)

fmt.Print("Enter a number")

input, _ := reader.ReadString('\n')

input = strings.TrimSuffix(input, "\n")

fmt.Printf("Type of the entered value is %T\n", input)

fmt.Println(input)

out, err := strconv.Atoi(input)

if err != nil {

    fmt.Printf("Error is: %v\n", err)

}

fmt.Printf("Type now is: %T\n", out)

fmt.Printf("Value now is %d\n", out)

fmt.Println(out)

您还可以使用Scanner,它不需要您删除\n:


scanner := bufio.NewScanner(os.Stdin)

fmt.Print("Enter a number")

scanner.Scan()

input := scanner.Text()


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

添加回答

举报

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