C语言 将声明的变量与int常量进行比较,显示错误“与布尔表达式比较的结果始终为真”-为什么是布尔值?

oipij1gg  于 2022-12-02  发布在  其他
关注(0)|答案(3)|浏览(153)

免责声明:我是一个新手。我在用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;
        }

(im使用visualstudio中的cs50代码空间,该代码空间具有上述get_int函数)
年龄小于12岁的人可以工作,但这条线出现了问题

else if(12<= age <16)

标题中提到的错误:Error
我的主要问题是“为什么”,而不仅仅是“如何”--在这种情况下,这是如何导致“布尔表达式”的??我只想检查age是否大于或等于12,小于16。age变量声明为int,根据我目前的理解,它将存储一个int而不是布尔值。否则我如何比较变量输入?

13z8s7eq

13z8s7eq1#

你要

12 <= age && age < 16


第一次
手段

( 12 <= age ) < 16

12 <= age0还是1取决于age的值,所以最后得到

0 < 16


所以你的条件总是真的。

iqjalb3h

iqjalb3h2#

您不能编写“数学风格”的比较,比较运算符是严格的二进制(比较两个对象,左侧和右侧),因此您最终会执行

else if ((12 <= age) < 16)

因为第一个<=的结果是0或1,所以它总是小于16,这总是真的。
相反,我会把它写为:

else if (age >= 12 && age < 16)

我认为这更容易理解,在两个比较中都有左边的变量。

6jjcrrmo

6jjcrrmo3#

12 <= age是一个“布尔表达式”,这意味着它会将12 <= age转换为布尔值(truefalse)。在C中为false = 0true = 1。因此,如果您编写不同的表达式:

  1. (12 <= age < 16)
  2. (true < 16)(false < 16)
  3. (1 < 16)(0 < 16)
  4. truetrue
    你要做的就是把它分解成各个表达式。
    (12<= age <16) --〉(12 <= age && age < 16)

相关问题