就在最近,我開始學習圍棋。我為 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)
- 1 回答
- 0 關注
- 107 瀏覽
添加回答
舉報
0/150
提交
取消