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

时间:2015-01-05 07:51:28

标签: go

算法竞争的问题是提供多行输入,第一行指定输入的计数。示例 -

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

有没有更好的方法来实现这一目标?上述方法由于某种原因感觉笨拙。

2 个答案:

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