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

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

如何使用 ReadLine() 獲取字符串輸入?

如何使用 ReadLine() 獲取字符串輸入?

Go
海綿寶寶撒 2023-07-17 17:50:41
我想從 stdio 獲取字符串,func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)但我的代碼無法正常工作。我傾向于 golang。我想知道如何從標準輸入獲取字符串ReadLine()我知道,fmt.Scan或者Scanner幫助我,但我想用ReadLine()package mainimport (        "bufio"        "fmt"        "io"        "os"        "strconv")var sc = bufio.NewScanner(os.Stdin)var rd = bufio.NewReaderSize(os.Stdin, 1000000)func nextInt() int {        sc.Scan()        i, e := strconv.Atoi(sc.Text())        if e != nil {                panic(e)        }        return i}func nextLine() string {        buf := make([]byte, 0, 1000000)        for {                line, isPrefix, err := rd.ReadLine()                if err == io.EOF {                        break                } else if err != nil {                        panic(err)                }                buf = append(buf, line...)                if !isPrefix {                        break                }        }        return string(buf)}func main() {        var s string        var a int        s = nextLine()        a = nextInt()        fmt.Println(s)        fmt.Println(a)}結果$ ./a.outtest # input334  # inputtest334$ cat in.txttest334$ ./a.out < in.txtpanic: strconv.Atoi: parsing "": invalid syntaxgoroutine 1 [running]:main.nextInt(0xc042056088)我預計兩個輸出應該是相同的,但是當我使用重定向時,它不起作用并得到不同的輸出。
查看完整描述

2 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

擺脫掃描儀(您已經說過您更喜歡 ReadLine())并更改 nextInt() 函數以調用 nextLine(),如下所示:


func nextInt() int {

    i, e := strconv.Atoi(nextLine())

    if e != nil {

        panic(e)

    }

    return i

}

(順便說一句,對錯誤的用戶輸入感到恐慌并不是一個好主意,但我認為這只是一個測試,您不會對生產代碼這樣做:)


查看完整回答
反對 回復 2023-07-17
?
catspeake

TA貢獻1111條經驗 獲得超0個贊

你可以嘗試不使用掃描儀,也許像這樣 Readline 會為你獲取數字,只需轉換它


package main


import (

    "bufio"

    "fmt"

    "io"

    "os"

    "strconv"

)


var rd = bufio.NewReaderSize(os.Stdin, 1000000)


func nextLine() string {

    buf := make([]byte, 0, 1000000)

    for {

        line, isPrefix, err := rd.ReadLine()


        if err == io.EOF {

            break

        } else if err != nil {

            panic(err)

        }


        buf = append(buf, line...)


        if !isPrefix {

            break

        }

    }

    return string(buf)

}


func main() {

    var s string

    var a int


    s = nextLine()

    fmt.Println(s)

    s = nextLine()

    a, e := strconv.Atoi(s)

    if e != nil {

        panic(e)

    }

    fmt.Println(a)

}


查看完整回答
反對 回復 2023-07-17
  • 2 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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