整齐地将int空间分隔成数组的方式吗?

时间:2018-10-14 16:09:03

标签: arrays go

如果我有任何明显的问题,我只是刚刚开始使用go,所以请提前对不起,但是我花了很长时间在网上寻找答案,找不到我想要的东西。

我想读取一行用空格分隔的int值,并将它们存储到数组中。值的数量在输入之前将是已知的,但是我敢肯定,必须有比这更简单或更整洁的编写方式:

package main

import "fmt"

func main()  {
    var array[5] int
    fmt.Scanf("%d %d %d %d %d", &array[0], &array[1], &array[2], &array[3], &array[4])
    fmt.Printf("%v", array)

}

我还需要这样做,以便可以更改值的数量(最多50个),并且仍应将它们存储在数组中。我编写了一个简单的函数,以使scanf函数读取正确数量的数字,但没有将每个数组元素都写到&array [49],我找不到解决方法。 是否有一种更简单的方法来存储所有值,而又不需要很长的数组位置列表?

package main

import "fmt"

func main()  {
    var length int
    fmt.Scanf("%d", &length)
    var array[50] int
    fmt.Scanf(scanFormat(length), &array[0], &array[1], &array[2]) //etc.
    fmt.Printf("%v", array)

}
func scanFormat (N int) string{
    if N==0 {
        return ""
    }
    return "%d "+scanFormat(N-1)
}

1 个答案:

答案 0 :(得分:1)

您可以使用bufio.NewScanner来扫描整行。默认的拆分功能是ScanLines。

  

NewScanner返回一个新的Scanner以从r中读取。分割功能   默认为ScanLines。

func (s *Scanner) Text() string
  

文本返回通过调用Scan生成的最新令牌,作为   新分配的保留其字节的字符串

一一解析字符串值,将字符串转换为整数值,然后将数据附加到整数切片中。现在以您想要的方式处理数据。

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

func main() {

    data := make([]int, 0)
    scanner := bufio.NewScanner(os.Stdin)
    counter := 0
    for scanner.Scan() {
        output := strings.Split(scanner.Text(), " ")
        for _, value := range output {
            i, err := strconv.Atoi(value)
            if err != nil {
                fmt.Println(err)
            }
            data = append(data, i)
        }
        counter++
    }

    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stdout, "reading standard input:", err)
    }

    fmt.Println("the data from terminal: ", data)
}