【问题标题】:Read numbers from os.Stdin into array or slice in Go将 os.Stdin 中的数字读入 Go 中的数组或切片
【发布时间】:2018-08-03 05:36:56
【问题描述】:

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

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

【问题讨论】:

    标签: arrays pointers go slice


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 2023-01-24
      • 2015-06-20
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 2015-11-04
      • 2019-06-07
      • 1970-01-01
      相关资源
      最近更新 更多