每天讲解一道c语言的小知识点
#include <stdio.h>
int main()
{
int x = -2;
if(-3 <= x <= -1)
{
printf("111");
}
printf("222");
return 0;
}
想想答案会输出什么呢?
-3 <= -2 <= -1是成立的
那就会进入if条件里面是吧?
所以就会输出 111222 咯
ㅤ
ㅤ
ㅤ
ㅤ
ㅤ
ㅤ
ㅤ
ㅤ
ㅤ
ㅤ
ㅤ
ㅤ
然而运行之后的答案并不是
来看看答案:
欸,好像只有输出了 222 呀
在这里很多新手都会想当然的写上
if(-3 <= x <= -1)
{
}
因为数学里面也是这样表示的,但是c语言里面可不是这样表示的
我们先说说c语言里面如果这样写,会怎么样呢
从网上找到c语言的运算优先级可知 <= 运算符的结合方式是由左向右结合
这里的 x = -2 我们带入c语言语句中
if(-3 <= -2 <= -1)
按照由左向右的运算顺序 我们先看 -3 <= -2
这是个关系表达式 c语言里面这种表达式会返回 1 或 0
显然-2比-3大,所以这里会返回1
然后语句就变成了这样
if(1 <= -1)
这还是一个关系表达式,所以我们继续计算
显然1 > -1 所以这个表达式返回 0
if( 0 )
if语句里面是0(假) 那就不会执行if语句用{}括起来的内容,所以上面的代码
printf("111");
也就不会执行啦
那还有一个问题
如果我要在c语言里面判断一个数是否大于-3小于-1那该怎么写呢?
答案是用 && 逻辑与运算符
从上面的运算优先级来看,会先执行 >= 和 <= 两关系表达式 最后用 && 表示"和" “与”
也就是两个条件都满足的情况,这样就能执行if语句里面的代码了
所以正确的做法是这样写
#include <stdio.h>
int main()
{
int x = -2;
if(-3 <= x && x <= -1)
{
printf("111");
}
printf("222");
return 0;
}
ㅤ
其实很多新手都喜欢这样写,下面是某新手写的代码,看上去也能打印 111222
但是逻辑本身是有问题的,你能帮这位新手修改一下代码吗?
#include <stdio.h>
int main()
{
int x = 2;
if(1 <= x <= 3)
{
printf("111");
}
printf("222");
return 0;
}