如何递归捕获用户输入

我正在尝试在 Go 中捕获一堆数字的输入。我不允许做 for 循环。用户输入是多行的。但是,下面的函数没有返回 a 的预期结果[]int,而是返回一个空数组。为什么是这样?还是有另一种方法可以在没有 for 循环的情况下捕获多行用户输入?


func input_to_list() []int {

    fmt.Print("continuously enter text: ")

    reader := bufio.NewReader(os.Stdin)

    user_input, _ := reader.ReadString('\n')

    print(user_input)

    var result []int

    if user_input == "\n" {

        return result

    }

    return append(result, input_to_list()...)

}


慕桂英3389331
浏览 103回答 2
2回答

梵蒂冈之花

如何递归捕获用户输入?我不允许做 for 循环。例如,package mainimport (    "bufio"    "fmt"    "io"    "os"    "strconv"    "strings")func readInt(rdr *bufio.Reader, n []int) []int {    line, err := rdr.ReadString('\n')    line = strings.TrimSpace(line)    if i, err := strconv.Atoi(line); err == nil {        n = append(n, i)    }    if err == io.EOF || strings.ToLower(line) == "end" {        return n    }    return readInt(rdr, n)}func ReadInts() []int {    fmt.Print("enter integers:\n")    var n []int    rdr := bufio.NewReader(os.Stdin)    return readInt(rdr, n)}func main() {    n := ReadInts()    fmt.Println(n)}输出:enter integers:427end[42 7]

阿晨1998

您的函数永远不会为result.func input_to_list() []int {    /* ... */    var result []int                          // Create empty `result` slice    if user_input == "\n" {        return result                         // Return empty result slice    }    return append(result, input_to_list()...) // Combine two empty slices, and return the (still) empty slice}让我们一步一步来:您创建一个名为result如果user_input为空,则立即返回结果。如果user_input不为空,则input_to_list()递归调用,并将其(空)结果添加到空结果中,然后返回该(仍然)空结果。为了获得您想要的行为,您应该使用user_input. 可能与strconv.Atoi或类似的东西,然后将其添加到result.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go