Как использовать 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.