一尘不染

将os.Stdin中的数字读入Go中的数组或切片

go

我可以使用下面的多个变量读取多个数字。

numbers := make([]int, 2)
fmt.Fscan(os.Stdin, &numbers[0], &numbers[1])

我可以使用数字本身而不是分开的形状来简化数字吗?

numbers := make([]int, 2)
fmt.Fscan(os.Stdin, &numbers) // just an example, got error

阅读 219

收藏
2020-07-02

共1个答案

一尘不染

fmt程序包不处理扫描切片,但是您可以创建一个实用程序函数,该函数打包所有元素的地址:

func packAddrs(n []int) []interface{} {
    p := make([]interface{}, len(n))
    for i := range n {
        p[i] = &n[i]
    }
    return p
}

使用此功能,您可以像这样扫描整个切片:

numbers := make([]int, 2)
n, err := fmt.Fscan(os.Stdin, packAddrs(numbers)...)
fmt.Println(numbers, n, err)

使用以下命令进行测试fmt.Sscan()

numbers := make([]int, 5)
n, err := fmt.Sscan("1 3 5 7 9", packAddrs(numbers)...)
fmt.Println(numbers, n, err)

输出(在Go Playground上尝试):

[1 3 5 7 9] 5 <nil>
2020-07-02