从标准输入中读取 n 个整数/浮点数/字符串



算法竞赛有问题,提供多行输入,第一行指定输入计数。例-

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
}