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

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

為什么Scanf的輸入總是0?

為什么Scanf的輸入總是0?

Go
開心每一天1111 2021-11-01 10:41:15
我試圖從用戶那里獲取輸入并將其打印出來,但顯然距離的值是0,在我做了一些輸入之后。這是代碼:type Person struct {    name string    age int    ambition string}func (p *Person) walking() {    var distance int    fmt.Println("Enter the distance")    fmt.Scanf("%f", &distance)    if distance < 9 {        fmt.Println(p.name, " is walking towards that direction in ", distance,            "kilometer")    } else {        fmt.Println("This is an error, ignore this")    }}正如您所看到的,每當我嘗試在主函數上運行此命令時,fmt.Println(p.name, " is walking towards that direction in ", distance, "kilometer")即使距離的值大于9.func main() {    p := new(Person)    p.name = "Joker"    p.walking()}p.walking()將始終打印距離為0?誰能向我解釋這里發生了什么?
查看完整描述

1 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

您使用了錯誤的格式字符串。%f用于掃描浮點數,但您的變量distance類型為int,因此您應該使用%d:


fmt.Scanf("%d", &distance)

或者將distance變量聲明為浮點數,然后您可以使用%f:


var distance float64

fmt.Println("Enter the distance")

fmt.Scanf("%f", &distance)

筆記:


fmt.Scanf()返回成功掃描的項目數和可選錯誤。您應該習慣于處理 Go 中的錯誤,這會為您節省大量時間。


通過存儲和打印 的返回值來最小化Scanf():


var distance int

fmt.Println("Enter the distance")

n, err := fmt.Scanf("%f", &distance)

fmt.Println(n, err)

印刷:


0 bad verb %f for integer

這會立即告訴您0已掃描項目并出現錯誤:bad verb %f for integer這幾乎是不言自明的。


這也解釋了為什么您總是看到0打印出的公里數:您的distance變量被初始化為0( 的零值int)并且它永遠不會改變。


如果掃描成功,您將看到以下輸出:


1 <nil>

這意味著成功掃描了一項(distance)并且沒有錯誤。


如果您一次Scanf()調用掃描多個項目,則n可能大于1當然(例如fmt.Scanf("%f %d", &distance, &temp))。


查看完整回答
反對 回復 2021-11-01
  • 1 回答
  • 0 關注
  • 287 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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