就在最近,我开始学习围棋。我为 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 关注
- 84 浏览
添加回答
举报
0/150
提交
取消