为了账号安全,请及时绑定邮箱和手机立即绑定

如何递归捕获用户输入

如何递归捕获用户输入

Go
慕桂英3389331 2022-05-23 14:54:05
我正在尝试在 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()...)}
查看完整描述

2 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

如何递归捕获用户输入?


我不允许做 for 循环。


例如,


package main


import (

    "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:

42

7

end

[42 7]


查看完整回答
反对 回复 2022-05-23
?
阿晨1998

TA贡献2037条经验 获得超6个赞

您的函数永远不会为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

}

让我们一步一步来:

  1. 您创建一个名为result

  2. 如果user_input为空,则立即返回结果。

  3. 如果user_input不为空,则input_to_list()递归调用,并将其(空)结果添加到空结果中,然后返回该(仍然)空结果。

为了获得您想要的行为,您应该使用user_input. 可能与strconv.Atoi或类似的东西,然后将其添加到result.


查看完整回答
反对 回复 2022-05-23
  • 2 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号