为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在使用 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 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信