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]

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
}
让我们一步一步来:
您创建一个名为
result
如果
user_input
为空,则立即返回结果。如果
user_input
不为空,则input_to_list()
递归调用,并将其(空)结果添加到空结果中,然后返回该(仍然)空结果。
为了获得您想要的行为,您应该使用user_input
. 可能与strconv.Atoi
或类似的东西,然后将其添加到result
.
- 2 回答
- 0 关注
- 102 浏览
添加回答
举报