You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Go中用Scanf不处理错误正常,加错误处理后输入0却异常?

为什么添加错误处理后输入0会输出Positive!?

问题出在你误用了fmt.Scanf的返回值,直接覆盖了原本用来存储输入数字的number变量。

核心原因

fmt.Scanf的第一个返回值是成功读取的输入项数量,不是你输入的数字本身。当你输入0时,fmt.Scanf成功读取了1个整数,所以返回1。而你用number, err := fmt.Scanf(...)把这个1赋值给了number,直接覆盖了原本通过指针传入的输入值0。后续判断时number的值是1,自然会输出Positive!。

正确的写法

你需要保留原来的number变量存储输入的数值,用其他变量接收fmt.Scanf返回的条目数(或者用下划线忽略):

var number int
// 用下划线忽略条目数,或用count变量接收(可选做额外校验)
_, 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!")
}

如果需要校验是否成功读取了一个整数,可以保留条目数变量做额外判断:

var number int
count, err := fmt.Scanf("%d", &number)
if err != nil || count != 1 {
    return
}

// 后续判断逻辑不变

内容的提问来源于stack exchange,提问作者worrum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:33:23