算法竞赛有问题,提供多行输入,第一行指定输入计数。例-
3
78
42
99
第一行告诉将有 3 个整数,后跟三个整数。
目前,我有以下代码来读取它们 -
package main
import "fmt"
func main() {
var num []int
var input int
var count int
fmt.Scanf("%d", &count)
for {
if (count == 0) {
break
}
fmt.Scanf("%d", &input)
num = append(num, input)
count--
}
}
有没有更好的方法来做到这一点?出于某种原因,上述方法感觉很笨拙。
此代码将所有内容推送到循环标头中,并将input
放入尽可能本地的作用域。您还应该检查 Scanf 返回的错误:
package main
import "fmt"
func main() {
var num []int
var count int
var err error
for _, err = fmt.Scanf("%dn", &count); err == nil && count > 0; count-- {
var input int
_, err = fmt.Scanf("%dn", &input)
num = append(num, input)
}
if err != nil {
panic(err)
}
}
大约有一百万种方法可以编写等效的代码,这对我来说似乎是最好的。可以提出一个参数,将错误检查放在append
之前的循环中,但由于遇到错误可能会使列表无效,我认为这样看起来更漂亮。
package main
import (
"bufio"
"os"
"fmt"
)
func main() {
reader := bufio.NewReader(os.Stdin)
a:= read(reader,100000)
fmt.Println(a)
}
func read (reader *bufio.Reader, n int)([]uint32) {
a := make([]uint32, n)
for i:=0; i<n; i++ {
fmt.Fscan(reader, &a[i])
}
return a
}