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

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

為什么在使用 Scanf unsafe 時答案正確,但在處理錯誤時答案卻不正確?(走)

為什么在使用 Scanf unsafe 時答案正確,但在處理錯誤時答案卻不正確?(走)

Go
慕萊塢森 2023-01-03 15:38:01
就在最近,我開始學習圍棋。我為 JetBrains Academy 做了一個簡單的任務。有一個非常簡單的代碼:    var number int    fmt.Scanf("%d", &number)    if number > 0 {        fmt.Println("Positive!")    } else if number < 0 {        fmt.Println("Negative!")    } else {        fmt.Println("Zero!")這段代碼工作得很好,但如果我使用 IDE 自動生成的錯誤處理:    var number int    number, err := fmt.Scanf("%d", &number)    if err != nil {        return    }    if number > 0 {        fmt.Println("Positive!")    } else if number < 0 {        fmt.Println("Negative!")    } else {        fmt.Println("Zero!")    }如果輸入數字“0”,輸出將是“Positive!”,而不是“Zero!” 這是為什么?
查看完整描述

1 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

   number, err := fmt.Scanf("%d", &number)

這將首先將解析后的值存儲number到Scanf. 然后Scanf將返回并且您的代碼將存儲1到中,因為這number是成功掃描的項目數(請參閱返回的文檔Scanf)。


要解決這個問題,您不應該使用相同的變量來存儲解析結果和存儲Scanf. 根據變量的預期用途準確命名變量也有很大幫助,以避免在編寫和調試代碼時混淆,即


parsedItems, err := fmt.Scanf("%d", &number)


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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