亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 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 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號