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

golang从sdin扫描一行数字

golang从sdin扫描一行数字

Go
qq_遁去的一_1 2021-11-15 15:34:01
我正在尝试从 stdin 中读取输入,例如3 2 1<ENTER>并将其保存在整数列表中。目前我的代码如下所示:nums = make([]int, 0)var i intfor {    _, err := fmt.Scan(&i)    if err != nil {        if err==io.EOF { break }        log.Fatal(err)    }    nums = append(nums, i)}目前程序永远不会离开 for 循环。我找不到在文档中检查换行符的简单方法。我该怎么做?编辑:由于我知道几乎肯定会有四个数字,因此我尝试了以下操作:var i0,i1,i2,i3 intfmt.Scanf("%d %d %d %d\n", &i0, &i1, &i2, &i3)但这仅扫描了第一个数字,然后退出了程序。我不确定这是否是因为我使用的 z-shell。编辑:为了澄清,程序将暂停并要求用户输入由空格分隔并以换行符终止的 n 个数字的列表。这些数字应该存储在一个数组中。
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

好吧,我决定拿出大 bufio 锤子,这样解决:


in := bufio.NewReader(os.Stdin)

line, err := in.ReadString('\n')

if err != nil {

    log.Fatal(err)

}

strs := strings.Split(line[0:len(line)-1], " ")

nums := make([]int, len(strs))

for i, str := range strs {

    if nums[i], err = strconv.Atoi(str); err != nil {

        log.Fatal(err)

    }

}

看起来确实有很多代码,但它确实有效。


查看完整回答
反对 回复 2021-11-15
?
温温酱

TA贡献1752条经验 获得超4个赞

看来你想要https://golang.org/pkg/fmt/#Fscanln


就像是


ok := func(err error) { if err != nil { panic(err) } }


for {

  var i, j, k int

  _, err := fmt.Fscanln(io.Stdin, &i, &j, &k)

  ok(err)

  fmt.Println(i, j, k)

}


查看完整回答
反对 回复 2021-11-15
?
偶然的你

TA贡献1841条经验 获得超3个赞

我会建议使用带有“scan()”方法的“bufio”包。以下是我从“stdin”读取两行并将这些行存储到数组中的代码。希望这对你有帮助。


package main


import (


    "fmt"

    "bufio"

    "os"

    "strconv"

    "strings"

)


func ReadInput() []string{


    var lines []string

    scanner := bufio.NewScanner(os.Stdin)


    for scanner.Scan() {

        lines = append(lines, scanner.Text())

        //count, _ := strconv.Atoi(lines[0])

        if len(lines) == 2 { break }

    }

    if err := scanner.Err(); err != nil {

    fmt.Fprintln(os.Stderr, err)

    }

    return lines

}


func main(){


    lines   := ReadInput()

    count ,_ := strconv.Atoi(lines[0])

    num := strings.Fields(lines[1])

    if count != len(num) { os.Exit(0) }

 // Do whatever you want here

}

将接受两行。第一行会有一个计数。第二行将包含所有数字。您可以根据需要修改相同的代码。


例子:


3

1 5 10 


查看完整回答
反对 回复 2021-11-15
  • 3 回答
  • 0 关注
  • 242 浏览
慕课专栏
更多

添加回答

举报

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