从stdin读取以空格分隔的整数到int slice中

Nat*_*son 4 go

我正在尝试从stdin中读取两行未知数目的空格分隔的整数。我想将每行整数存储到自己的整数切片中。

例如,我的输入可能如下所示:

1 2 3
4 5 6
Run Code Online (Sandbox Code Playgroud)

我想读成两个[]int

[1,2,3]
[4,5,6]
Run Code Online (Sandbox Code Playgroud)

到目前为止,这就是我所拥有的。scanner.Scan()给了我电话,但是我不确定如何将其转换为[]int

package main
import (
    "fmt"
    "os"
    "bufio"
)

func main() {
    var firstLine []int
    var secondLine []int

    scanner := bufio.NewScanner(os.Stdin)
    for scanner.Scan() {
        t := scanner.Text()
    }
}
Run Code Online (Sandbox Code Playgroud)

pet*_*rSO 6

例如,

numbers.go

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

func numbers(s string) []int {
    var n []int
    for _, f := range strings.Fields(s) {
        i, err := strconv.Atoi(f)
        if err == nil {
            n = append(n, i)
        }
    }
    return n
}

func main() {
    var firstLine, secondLine []int
    scanner := bufio.NewScanner(os.Stdin)
    for i := 1; i <= 2 && scanner.Scan(); i++ {
        switch i {
        case 1:
            firstLine = numbers(scanner.Text())
        case 2:
            secondLine = numbers(scanner.Text())
        }
    }
    fmt.Println(firstLine)
    fmt.Println(secondLine)
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ go run numbers.go
1 2 3
4 5 6
[1 2 3]
[4 5 6]
$
Run Code Online (Sandbox Code Playgroud)

  • 那么需要这么长的代码才能做到这一点吗?难道就没有更短的路吗? (2认同)