2 回答

TA貢獻(xiàn)1900條經(jīng)驗 獲得超5個贊
如何遞歸捕獲用戶輸入?
我不允許做 for 循環(huán)。
例如,
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貢獻(xiàn)2037條經(jīng)驗 獲得超6個贊
您的函數(shù)永遠(yuǎn)不會為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
}
讓我們一步一步來:
您創(chuàng)建一個名為
result
如果
user_input
為空,則立即返回結(jié)果。如果
user_input
不為空,則input_to_list()
遞歸調(diào)用,并將其(空)結(jié)果添加到空結(jié)果中,然后返回該(仍然)空結(jié)果。
為了獲得您想要的行為,您應(yīng)該使用user_input
. 可能與strconv.Atoi
或類似的東西,然后將其添加到result
.
- 2 回答
- 0 關(guān)注
- 125 瀏覽
添加回答
舉報