C语言中a < x < b连续比较表达式为何始终为真?执行逻辑解析
为什么10 < i < 15的条件始终为真?
在C语言中,比较运算符是左结合的,编译器会把10 < i < 15按照从左到右的顺序拆解为:
(10 < i) < 15
C语言没有专门的布尔类型,逻辑判断的结果用整数表示:
- 当
10 < i成立时,结果为1 - 当
10 < i不成立时,结果为0
分两种情况分析:
- 当
i <= 10时,10 < i的结果是0,此时表达式变为0 < 15,显然为真; - 当
i > 10时,10 < i的结果是1,此时表达式变为1 < 15,同样为真。
不管i取0到19之间的哪个值,整个表达式的结果都是真,所以循环里的printf会被执行每一次。
正确写法
要实现“i大于10且小于15”的逻辑,必须用逻辑与运算符&&结合两个比较表达式:
if ((10 < i) && (i < 15))
这样只有当i在11到14之间时,条件才会成立。
内容的提问来源于stack exchange,提问作者Crazy circuit
相关产品推荐
相关产品推荐

