如何使 fmt.Scanln() 读入整数切片

我有一行包含 3 个数字,我想使用 fmt.Scanln() 从标准输入读取,但此代码不起作用:


X := make([]int, 3)

fmt.Scanln(X...)

fmt.Printf("%v\n", X)

我收到此错误消息:


cannot use X (type []int) as type []interface {} in function argument

我不明白。


白衣非少年
浏览 341回答 3
3回答

萧十郎

例如,package mainimport "fmt"func intScanln(n int) ([]int, error) {    x := make([]int, n)    y := make([]interface{}, len(x))    for i := range x {        y[i] = &x[i]    }    n, err := fmt.Scanln(y...)    x = x[:n]    return x, err}func main() {    x, err := intScanln(3)    if err != nil {        fmt.Println(err)        return    }    fmt.Printf("%v\n", x)}输入:1 2 3输出:[1 2 3]

阿晨1998

惯用的 Go 将是:func read(n int) ([]int, error) {  in := make([]int, n)  for i := range in {    _, err := fmt.Scan(&in[i])    if err != nil {       return in[:i], err    }  }  return in, nil}interface{}没什么意思。如果非必要,请不要使用它。

慕哥6287543

我认为正确的版本应该是X := make([]int, 3)fmt.Scanln(&X[0], &X[1], &X[2])fmt.Printf("%v\n", X)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go