在Go语言中,使用递归从一行中扫描数字。

huangapple go评论104阅读模式
英文:

In Go, scan numbers from a line using recursion

问题

我想将一行整数从标准输入扫描到一个整数切片中。每个整数之间用空格分隔。用户输入的整数数量可能有N个。我试图不使用for循环来实现。例如,

1 15 16 17

到目前为止,这是我执行任务的函数:

  1. var array []int
  2. func read(b int) {
  3. if b == 0 {
  4. return
  5. }
  6. fmt.Scanf("%d", &array)
  7. read(b - 1)
  8. }

这个函数的思路是从输入中读取"1 15 16 17",并将其转换为值为[1 15 16 17]的切片。

编译后,我得到了错误:

  1. 运行时错误
英文:

I want to scan a line of integers from stdin into a slice of integers. Each integer is separated by whitespace. Ther would be as many as N integers of user input. I'm trying not to use a for loop. For example,

1 15 16 17

So far, this is my function to perform the task,

  1. var array []int
  2. func read(b int) {
  3. if b == 0 {
  4. return
  5. }
  6. fmt.Scanf("%d", &array)
  7. read(b - 1)
  8. }

The idea is to read from the input, 1 15 16 17, and make it into a slice with value [1 15 16 17]

After compiling, I got the error,

  1. Runtime error

答案1

得分: 0

例如,

  1. package main
  2. import "fmt"
  3. var a []int
  4. func read(b int) {
  5. if b == 0 {
  6. return
  7. }
  8. var i int
  9. _, err := fmt.Scanf("%d", &i)
  10. if err != nil {
  11. return
  12. }
  13. a = append(a, i)
  14. read(b - 1)
  15. }
  16. func main() {
  17. read(4)
  18. fmt.Println(a)
  19. }

输入:

  1. 1 15 16 17<Enter>

输出:

  1. [1 15 16 17]
英文:

For example,

  1. package main
  2. import &quot;fmt&quot;
  3. var a []int
  4. func read(b int) {
  5. if b == 0 {
  6. return
  7. }
  8. var i int
  9. _, err := fmt.Scanf(&quot;%d&quot;, &amp;i)
  10. if err != nil {
  11. return
  12. }
  13. a = append(a, i)
  14. read(b - 1)
  15. }
  16. func main() {
  17. read(4)
  18. fmt.Println(a)
  19. }

Input:

  1. 1 15 16 17&lt;Enter&gt;

Output:

  1. [1 15 16 17]

答案2

得分: -1

不是递归的,而是读取整数直到stdin关闭或读取到无法转换为整数的内容。

  1. package main
  2. import "fmt"
  3. func main() {
  4. var array []int
  5. var i int
  6. for {
  7. _, err := fmt.Scan(&i)
  8. if err != nil {
  9. break
  10. }
  11. array = append(array, i)
  12. fmt.Println("从stdin读取数字", i, ",数组为", array)
  13. }
  14. }
英文:

Not recursive, but just reading integers until stdin is closed or something that can't be converted to an integer is read.

  1. package main
  2. import &quot;fmt&quot;
  3. func main() {
  4. var array []int
  5. var i int
  6. for {
  7. _, err := fmt.Scan(&amp;i)
  8. if err != nil {
  9. break
  10. }
  11. array = append(array, i)
  12. fmt.Println(&quot;read number&quot;, i, &quot;from stdin, array &quot;, array)
  13. }
  14. }

huangapple
  • 本文由 发表于 2016年3月14日 06:39:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/35976781.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定