C语言中12<=age<16报‘布尔表达式恒为真’错的原因及写法
C语言条件判断表达式报错问题解答
先看你写的这段代码:
int age = get_int("Age in whole numbers: "); int r; if(age<12) { printf("Go back kid\n"); r = 0; } else if(12<= age <16) { printf("Teenagers not allowed\n"); r = 0; }
为什么12<= age <16会被识别成布尔表达式且永远为真?
C语言里表达式是从左到右依次运算的,这个式子会被拆成两步执行:
- 第一步计算
12 <= age,这个比较的结果是布尔值:如果age >=12,结果是1(代表真);如果age <12,结果是0(代表假) - 第二步用第一步得到的
1或0去和16比较,也就是变成1 <16或者0 <16——这两个式子的结果都是真,所以不管age取什么值,整个表达式永远为真,编译器就会抛出"result of comparison with Boolean expression always true"的报错。
正确的判断写法
要判断age同时满足大于等于12且小于16,得用C语言的逻辑与运算符&&,把两个独立的比较表达式连起来:
else if(12 <= age && age <16)
修改后的完整代码示例:
int age = get_int("Age in whole numbers: "); int r; if(age<12) { printf("Go back kid\n"); r = 0; } else if(12 <= age && age <16) { printf("Teenagers not allowed\n"); r = 0; }
内容的提问来源于stack exchange,提问作者Astha
相关产品推荐
相关产品推荐

