免责声明:我是一个新手。我在用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而不是布尔值。否则我如何比较变量输入?
3条答案
按热度按时间13z8s7eq1#
你要
或
第一次
手段
12 <= age
是0
还是1
取决于age
的值,所以最后得到或
所以你的条件总是真的。
iqjalb3h2#
您不能编写“数学风格”的比较,比较运算符是严格的二进制(比较两个对象,左侧和右侧),因此您最终会执行
因为第一个
<=
的结果是0或1,所以它总是小于16,这总是真的。相反,我会把它写为:
我认为这更容易理解,在两个比较中都有左边的变量。
6jjcrrmo3#
12 <= age
是一个“布尔表达式”,这意味着它会将12 <= age
转换为布尔值(true
或false
)。在C中为false = 0
和true = 1
。因此,如果您编写不同的表达式:(12 <= age < 16)
(true < 16)
或(false < 16)
(1 < 16)
或(0 < 16)
true
或true
你要做的就是把它分解成各个表达式。
(12<= age <16)
--〉(12 <= age && age < 16)