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

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

Go switch case 中的不一致行為

Go switch case 中的不一致行為

Go
斯蒂芬大帝 2021-08-23 17:34:24
這是非常不尋常的:給定相同的輸入,Go 會隨機表現不同。package mainimport "fmt"func main() {    var i string    fmt.Scanf("%s\n", &i)    fmt.Println(i)    switch i {    case "a":        fmt.Println("good")    case "b":        fmt.Println("not good")    default:        fmt.Println("bad")    }}在命令提示符我運行go run test.go然后我輸入"a <enter>"有時得到:aagood隨機(大約一半的時間)做同樣的事情會產生:atbadWindows 7 上的安裝是 go1.3.3.windows-amd64.msi 知道這里發生了什么嗎?
查看完整描述

2 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

以防萬一這是一個 eol(行尾)問題,請嘗試:

fmt.Scanf("%s\r\n",?&i)

這在“我如何fmt.Scanf在 Go 中使用”中提到:

這是因為不同的行尾。
Windows 使用回車和換行('?\r\n')作為行尾。
Unix 使用換行符('?\n')


查看完整回答
反對 回復 2021-08-23
?
catspeake

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

我無法重現您的錯誤。


不要忽略錯誤。例如,


package main


import "fmt"


func main() {

    var i string

    n, err := fmt.Scanf("%s\n", &i)

    if err != nil || n != 1 {

        fmt.Println(n, err)

    }

    fmt.Println(i)

    switch i {

    case "a":

        fmt.Println("good")

    case "b":

        fmt.Println("not good")

    default:

        fmt.Println("bad")

    }

}

輸出:


C:\>go version

go version go1.3.3 windows/amd64

C:\gopath\src\so>go run test.go

a

a

good

C:\gopath\src\so>go run test.go

b

b

not good

C:\gopath\src\so>go run test.go

t

t

bad


查看完整回答
反對 回復 2021-08-23
  • 2 回答
  • 0 關注
  • 232 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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