就在最近,我開(kāi)始學(xué)習(xí)圍棋。我為 JetBrains Academy 做了一個(gè)簡(jiǎn)單的任務(wù)。有一個(gè)非常簡(jiǎn)單的代碼: 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 自動(dòng)生成的錯(cuò)誤處理: 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!") }如果輸入數(shù)字“0”,輸出將是“Positive!”,而不是“Zero!” 這是為什么?
1 回答

哆啦的時(shí)光機(jī)
TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
number, err := fmt.Scanf("%d", &number)
這將首先將解析后的值存儲(chǔ)number到Scanf. 然后Scanf將返回并且您的代碼將存儲(chǔ)1到中,因?yàn)檫@number是成功掃描的項(xiàng)目數(shù)(請(qǐng)參閱返回的文檔Scanf)。
要解決這個(gè)問(wèn)題,您不應(yīng)該使用相同的變量來(lái)存儲(chǔ)解析結(jié)果和存儲(chǔ)Scanf. 根據(jù)變量的預(yù)期用途準(zhǔn)確命名變量也有很大幫助,以避免在編寫(xiě)和調(diào)試代碼時(shí)混淆,即
parsedItems, err := fmt.Scanf("%d", &number)
- 1 回答
- 0 關(guān)注
- 116 瀏覽
添加回答
舉報(bào)
0/150
提交
取消