为什么在使用 Scanf unsafe 时答案正确,但在处理错误时答案却不正确?(走)

就在最近,我开始学习围棋。我为 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!” 这是为什么?


慕莱坞森
浏览 93回答 1
1回答

哆啦的时光机

&nbsp; &nbsp;number, err := fmt.Scanf("%d", &number)这将首先将解析后的值存储number到Scanf. 然后Scanf将返回并且您的代码将存储1到中,因为这number是成功扫描的项目数(请参阅返回的文档Scanf)。要解决这个问题,您不应该使用相同的变量来存储解析结果和存储Scanf. 根据变量的预期用途准确命名变量也有很大帮助,以避免在编写和调试代码时混淆,即parsedItems, err := fmt.Scanf("%d", &number)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go