Как использовать strconv.Метод Atoi() в Go?
Я пытаюсь получить пользовательский ввод в этой небольшой программе. Я попытался сделать это несколькими способами с помощью strconv.Atoi()
способ (мое мнение явно строка, и я пытаюсь преобразовать его в целое число). Вот моя первая попытка:
package main
import (
"fmt"
"strconv"
)
func main() {
//fmt.Println(strconv.Itoa)
fmt.Println("Say something, in numbers.")
var inputstr string
fmt.Scanln("%s", &inputstr)
input := strconv.Atoi(inputstr)
output := (input * 2)
outputstr := strconv.Itoa(output)
fmt.Println(outputstr)
}
и получаю следующую ошибку, когда дело дошло до компиляции:
(строка 19) многозначный strconv.Atoi () в контексте с одним значением
затем я посмотрел в Godocs и попытался понять это для себя, а затем понял, что возвращается значение ошибки. Итак, я изменил
input := strconv.Atoi(inputstr)
to
input, _ := strconv.Atoi(inputstr)
теперь это компилируется нормально, без ошибок. Однако, когда я запускаю программу, вот что я получаю:
скажи что-нибудь, в цифрах.
0
и затем он выходит... Что я делаю не так? Я считаю, что это вопрос о Atoi()
метод, но если это в отношении Scanln()
тогда, пожалуйста меня поправить.
1 ответов
проблема оказывается в Scanln. Scanln возвращает ошибку type not a pointer
из-за %s. Это затем оставляет inputstr пустым, который при задании Atoi возвращает ошибку:strconv.ParseInt: parsing "": invalid syntax
.
использование Scanf следующим образом без изменения Atoi:
func main() {
//fmt.Println(strconv.Itoa)
fmt.Println("Say something, in numbers.")
var inputstr string
//fmt.Scanln("%s", &inputstr)
_, err := fmt.Scanf("%s", &inputstr)
if err != nil {
fmt.Println(err)
}
input, e := strconv.Atoi(inputstr)
if e != nil {
fmt.Println(e)
}
output := (input * 2)
outputstr := strconv.Itoa(output)
fmt.Println(outputstr)
}
вероятно, самым простым решением является удаление "%s " из Scanln.