我才刚刚开始使用 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)
}
最佳答案
你可以去 bufio.NewScanner
扫描整行。默认的分割函数是 ScanLines。
NewScanner returns a new Scanner to read from r. The split function defaults to ScanLines.
func (s *Scanner) Text() string
Text returns the most recent token generated by a call to Scan as a newly allocated string holding its bytes
逐一解析字符串值,将字符串转换为整数值,将数据追加到整数 slice 中。现在以您想要的方式处理数据。
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)
}
关于arrays - 将空间分隔的整数存储到数组中的更整洁的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52804595/