【问题标题】:Compared declared variable to int constant and it shows error "result of comparison with boolean expression always true"将声明的变量与 int 常量进行比较,它显示错误“与布尔表达式的比较结果始终为真”
【发布时间】:2022-11-28 21:57:19
【问题描述】:

免责声明:我是新手。 我正在通过一个简单的测验在 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;
        }

(我在具有上述 get_int 函数的 visualstudio 中使用 cs50 代码空间)

年龄 <12 有效,但此行显示问题

  else if(12<= age <16)

标题中提到的错误:Error

在这种情况下,“布尔表达式”是什么意思?我只想检查年龄是否大于或等于 12 且小于 16。根据我目前的理解,年龄变量声明为 int 并将存储一个 int 而不是布尔值。 我还能如何比较变量输入?

【问题讨论】:

  • 您不能在 C 中使用复合比较。使用 12 &lt;= age &amp;&amp; age &gt; 16
  • 尝试从左到右检查它。 '12 <= age' 产生一个布尔值。 “布尔值”小于 16 吗?为什么是。是的,是的,因为它始终为 0 或 1。因此条件始终为“真”。

标签: c


【解决方案1】:

你不能写“数学风格”的比较,比较运算符是严格的二元的(比较两件事,左边和右边)所以你最终做

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

由于第一个 &lt;= 结果为 0 或 1,因此它始终小于 16,这始终为真。

相反,我会把它写成:

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

我认为这更容易阅读,两个比较的左边都有变量。

【讨论】:

    【解决方案2】:

    你要

    12 <= age && age < 16
    

    或者

    age >= 12 && age < 16
    

    12 <= age < 16
    

    方法

    ( 12 <= age ) < 16
    

    12 &lt;= age01 取决于age 的值,所以你最终得到

    0 < 16
    

    或者

    1 < 16
    

    所以你的条件总是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 2020-08-28
      相关资源
      最近更新 更多