为何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
相关产品推荐
相关产品推荐

