从os.Stdin中将数字读入数组或切片中 [英] Read numbers from os.Stdin into array or slice in Go
问题描述
数字:= make([] int,2)
fmt.Fscan(os.Stdin,& numbers [0],& numbers [1])$ b $ b
$ b $我可以使用数字本身而不是分离的形状来简化它吗?
numbers:= make([] int ,2)
fmt.Fscan(os.Stdin,& numbers)//只是一个例子,出错
fmt
软件包不处理扫描切片,但您可以创建一个实用程序函数,其中包含所有元素的地址:
func packAddrs(n [] int)[] interface {} {
p:= make([] interface {},len(n))
for i:= range n {
p [i] =& n [i]
}
返回p
}
使用此功能,您可以像这样扫描整片:
numbers:= make([] int,2)
n,err:= fmt.Fscan(os.Stdin,packAddrs(numbers)...)
fmt.Println(numbers ,n,err)
使用 fmt.Sscan()
:
< pre $ numbers:= make([] int,5)
n,err:= fmt.Sscan(1 3 5 7 9,packAddrs(numbers)...)
fmt.Println(numbers,n,err)
输出(在< a href =https://play.golang.org/p/iwSo5PxH-fh =nofollow noreferrer> Go Playground ):
[1 3 5 7 9] 5< nil>
I can read multiple numbers using multiple variables like bellow.
numbers := make([]int, 2)
fmt.Fscan(os.Stdin, &numbers[0], &numbers[1])
Can I use numbers itself not as separated shape to make it simpler?
numbers := make([]int, 2)
fmt.Fscan(os.Stdin, &numbers) // just an example, got error
The fmt
package does not handle scanning slices, but you can create a utility function which packs the addresses of all the elements:
func packAddrs(n []int) []interface{} {
p := make([]interface{}, len(n))
for i := range n {
p[i] = &n[i]
}
return p
}
And using this, you can scan a whole slice like this:
numbers := make([]int, 2)
n, err := fmt.Fscan(os.Stdin, packAddrs(numbers)...)
fmt.Println(numbers, n, err)
Testing it with fmt.Sscan()
:
numbers := make([]int, 5)
n, err := fmt.Sscan("1 3 5 7 9", packAddrs(numbers)...)
fmt.Println(numbers, n, err)
Output (try it on the Go Playground):
[1 3 5 7 9] 5 <nil>
这篇关于从os.Stdin中将数字读入数组或切片中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!