亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 275 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號