算法竞争的问题是提供多行输入,第一行指定输入的计数。示例 -
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--
}
}
有没有更好的方法来实现这一目标?上述方法由于某种原因感觉笨拙。
答案 0 :(得分:1)
此代码将所有内容推送到循环标头中,并将input
放入可能的最本地范围。你应该检查Scanf返回的错误:
package main
import "fmt"
func main() {
var num []int
var count int
var err error
for _, err = fmt.Scanf("%d\n", &count); err == nil && count > 0; count-- {
var input int
_, err = fmt.Scanf("%d\n", &input)
num = append(num, input)
}
if err != nil {
panic(err)
}
}
有大约一百万种编写等效代码的方法,这对我来说似乎是最好的。可以在append
之前将错误检查放在循环中,但是由于遇到错误可能会使列表无效,我认为这样看起来更漂亮。
答案 1 :(得分:0)
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
}