1

我无法通过 use从Golangfmt.scan()中的用户那里获取输入。

package main

import "fmt"

func main() {
    fmt.Print("Enter text: ")
    var input string
    e, _ := fmt.Scanln(&input)
    fmt.Println(input)
    fmt.Println(e)
}

代码图像

停止调试器后: 代码图像添加到代码 中err,但没有任何反应。

func main() {
    fmt.Print("Enter text: ")
    var input string
    e, err := fmt.Scanln(&input)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        return
    }
    fmt.Println(input)
    fmt.Println(e)
}

在我的代码中添加错误后的图像。下一行中的“不可用”是什么(在我的输入值之后:“51213”)

4

3 回答 3

4

你的代码没有问题。如果您使用构建代码go build并直接在终端中运行二进制文件,您将看到您的代码运行。

您遇到的问题是因为 Delve 和 vscode 调试控制台。vscode 调试控制台不支持从标准输入读取。您可以检查此问题:无法调试从 STDIN 读取的程序以获取详细信息。

于 2019-03-16T06:19:21.477 回答
3

不需要'e'。将其替换为下划线并删除打印语句。


import (
    "fmt"
    "os"
)
func main() {
    fmt.Print("Enter text: \n")
    var input string
    _, err := fmt.Scanln(&input)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        return
    }
    fmt.Println(input)
}
于 2019-10-21T20:20:22.330 回答
0

作为记录。如果要输入数值,fmt.Scan 将值作为字符串存储在变量中,如果要对其执行任何数学运算,则需要将其转换为 int 或 float。一个简单的例子:

func main() {
    fmt.Println("Type your age: ")

    var input string
    _, err := fmt.Scanln(&input)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        return
    }
    fmt.Printf("%T\n", input)        // outputs string
    inputInt,_ := strconv.Atoi(input)   
    fmt.Printf("%T\n", inputInt)     // outputs int
    fmt.Printf("You were born in %d\n", 2021-inputInt)
}

我花了一段时间才弄明白,希望它有帮助!

于 2021-05-27T14:40:51.183 回答