Reputation: 3318
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
Upvotes: 6
Views: 2818
Reputation: 417592
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>
Upvotes: 4