为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
撒科打诨 2021-09-10 17:01:30
算法竞赛的问题是在多行中提供输入,第一行指定输入的数量。例子 -3784299第一行告诉有 3 个整数,后面跟着三个整数。目前,我有以下代码来阅读它们 -package mainimport "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 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

此代码将所有内容推送到循环头中,并放入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,但由于遇到错误可能会使列表无效,我认为这样看起来更漂亮。


查看完整回答
反对 回复 2021-09-10
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

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

}


查看完整回答
反对 回复 2021-09-10
  • 2 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信