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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:45:35