从标准输入读取 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--

    }

}

有没有更好的方法来执行此操作?由于某种原因,上述方法感觉很笨拙。


撒科打诨
浏览 200回答 2
2回答

慕哥9229398

此代码将所有内容推送到循环头中,并放入input尽可能最局部的范围。您也应该检查 Scanf 返回的错误:package mainimport "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,但由于遇到错误可能会使列表无效,我认为这样看起来更漂亮。

摇曳的蔷薇

package mainimport (&nbsp; &nbsp; "bufio"&nbsp; &nbsp; "os"&nbsp; &nbsp; "fmt")func main() {&nbsp; &nbsp; reader := bufio.NewReader(os.Stdin)&nbsp; &nbsp; a:= read(reader,100000)&nbsp; &nbsp; fmt.Println(a)}func read (reader *bufio.Reader, n int)([]uint32) {&nbsp; &nbsp; a := make([]uint32, n)&nbsp; &nbsp; for i:=0; i<n; i++ {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Fscan(reader, &a[i])&nbsp; &nbsp; }&nbsp; &nbsp; return a}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go