欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

golang--获取和存储数量不定的输入数据

程序员文章站 2022-03-12 08:09:13
开始:一直有写博客的心,也一直在向大家推荐这种方式,现在终于轮到自己尝试开始写了! 目的: 记录自己的学习过程,以公开发布的方式让自己认真对待学习! 目录: 1. 实用场景 2. 错误分析 3. 解决 1. 实用场景: 经常会用到从golang的控制台输入数据并获取数据存储下来。但是由于获取的数据的 ......

开始:一直有写博客的心,也一直在向大家推荐这种方式,现在终于轮到自己尝试开始写了!

目的: 记录自己的学习过程,以公开发布的方式让自己认真对待学习!

目录:

  1. 实用场景

  2. 错误分析

  3. 解决

1. 实用场景:

  经常会用到从golang的控制台输入数据并获取数据存储下来。但是由于获取的数据的个数并不知道,需要根据其他的条件共同决定。

举个例子:1. 从控制台数据一个int数据来指示要获取数据的个数

     2. 根据第一步获取的数据,完成对应数据的获取和存储

输入:4

   4 0

   2 0

   0 8

   2 9

输出:[4 2 0 2] [0 0 8 9]

2. 错误分析:

  直接来看看我的错误: 

package main
import (
	"fmt"
)
func main() {
	var (
		N int
		H []int//定义一个空切片
		S []int
	)
	fmt.Scanln(&N)
	for i := 0; i < N; i++ {
		fmt.Scanln(&H[i], &S[i])//panic: runtime error: index out of range
	}
	fmt.Println(H, S)
}

  

分析:首先整体思路是对的,定义两个切片来存储获取的数据并用for循环来存储,但是忽略了定义的是一个空切片,在循环的时候不能进行遍历,所有报错了。

3. 解决:

  只有先找到错误并分析,才能解决问题	
package main

import (
	"fmt"
)

func main() {
	var (
		N int
		H []int
		S []int
	)
	fmt.Scanln(&N)
	for i := 0; i < N; i++ {
		var h, s int
		fmt.Scanln(&h, &s)//临时存储
		H = append(H, h)//追加到切片中
		S = append(S, s)
	}
	fmt.Println(H, S)
} 

输入:

2

0 8

2 0

输出:

[0 2] [8 0]