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

Algorithm competition have questions that provide the input in multiple lines, with the first line specifying the count of the inputs. Example -

3
78
42
99

The first line tells that there will be 3 integers followed by the three integers.

Currently, I have the following code to read them -

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--
    }
}

Is there a better way to carry this out? The above approach feels clumsy for some reason.

This code pushes everything into the loop header, as well as puts input into the most local scope possible. You should be checking the error returned by Scanf too:

package main

import "fmt"

func main() {
    var num []int
    var count int
    var err error

   for _, err = fmt.Scanf("%d
", &count); err == nil && count > 0; count-- {
       var input int
       _, err = fmt.Scanf("%d
", &input)
       num = append(num, input)
   }

   if err != nil {
       panic(err)
   }

}

There are about a million ways to write equivalent code, this seemed the best to me. An argument could be made for putting the error check in the loop before the append, but since encountering an error presumably invalidates the list, I thought it looked prettier this way.

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
}