如果我有任何明显的问题,我只是刚刚开始使用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)
}
答案 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)
}