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

为何C语言中该if表达式几乎恒为1?三位数去重程序异常排查

为什么你的C语言判断表达式几乎总是返回1?

你写的if((i%10) != (i/10%10) != (i/100))犯了C语言语法逻辑的错误——C不支持连续的不等运算符直接判断三者互不相同,这个表达式会被编译器按从左到右的顺序拆解成两步计算:

  1. 先计算左侧的i%10 != i/10%10,这个比较的结果是一个布尔值:如果两个数字不等,结果为1(真);相等则为0(假)。
  2. 再用第一步得到的1或0,和右侧的i/100做不等比较,也就是判断(第一步的结果) != i/100。

拿你提到的数字100举例:

  • 个位是100%10=0,十位是100/10%10=0,所以第一步0 != 0的结果是0。
  • 接着计算0 != 100/100(也就是0 !=1),这个判断为真,结果为1,所以if条件成立,错误地打印了100。

再看数字111:

  • 个位和十位都是1,第一步1 !=1得0,然后0 !=1(百位是1)得1,条件成立,所以被打印。

而像正确的数字102:

  • 个位2,十位0,第一步2 !=0得1,然后1 !=1(百位是1)得0,条件不成立,所以不会被打印,这就是为什么你看不到预期的正确结果。

要实现“三位数字互不相同”的判断,需要明确写出两两不等的逻辑,用逻辑与&&连接:

if((i%10 != i/10%10) && (i%10 != i/100) && (i/10%10 != i/100))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:55:23