C语言if-else使用0<n<1000条件判断输出异常原因求解
原因说明
C语言的规则决定了0 < n < 1000的写法不符合预期的区间判断逻辑:
- 关系运算符(
</>/<=/>=)是左结合的,运算顺序从左到右 - 关系表达式的返回值为int类型:条件成立返回
1,不成立返回0
所以0 < n < 1000实际等价于(0 < n) < 1000,代入n=2500的运算过程如下:
- 先计算
0 < 2500,条件成立,返回值为1 - 再计算
1 < 1000,条件也成立,整个表达式最终结果为1(真值) - 因此if判断成立,执行分支打印
no
如果要实现“n大于0且小于1000”的区间判断,必须用逻辑与运算符&&连接两个独立的关系判断,即n > 0 && n < 1000,也就是你第二段代码的写法,运行后会输出预期的yes。
测试代码
#include<stdio.h> int main() { int n=2500; // 错误写法,实际等价于(0 < n) < 1000 if(0<n<1000){ printf("no\n"); } else{ printf("yes\n"); } // 正确写法,判断两个条件同时成立 if(n>0 && n<1000){ printf("no\n"); } else{ printf("yes\n"); } return 0; }
内容的提问来源于stack exchange,提问作者jspy
相关产品推荐
相关产品推荐

