在Go中,使用递归扫描行中的数字

时间:2016-03-13 22:39:07

标签: input go stdin

我想从stdin扫描一行整数到一个整数切片。每个整数由空格分隔。 Ther将是N个用户输入的整数。我试图不使用for循环。例如,

1 15 16 17

到目前为止,这是我执行任务的功能,

var array []int

func read(b int) {
    if b == 0 {
        return
    }
    fmt.Scanf("%d", &array)
    read(b - 1)
}

这个想法是从输入读取,1 15 16 17,并将其变成一个值为[1 15 16 17]的切片

编译后,我收到了错误,

Runtime error

2 个答案:

答案 0 :(得分:0)

例如,

package main

import "fmt"

var a []int

func read(b int) {
    if b == 0 {
        return
    }
    var i int
    _, err := fmt.Scanf("%d", &i)
    if err != nil {
        return
    }
    a = append(a, i)
    read(b - 1)
}

func main() {
    read(4)
    fmt.Println(a)
}

输入:

1 15 16 17<Enter>

输出:

[1 15 16 17]

答案 1 :(得分:-1)

不是递归的,只是读取整数直到stdin关闭或者无法转换为整数的东西。

package main

import "fmt"

func main() {
    var array []int
    var i int
    for {
        _, err := fmt.Scan(&i)
        if err != nil {
            break
        }
        array = append(array, i)
        fmt.Println("read number", i, "from stdin, array ", array)
    }
}