我们习惯了向if里面传递布尔值,如果为true就进入if语句块中;或者传入一个判断语句(表达式a==表达式b);或者传入数值,0为false,其他都为true。等等
初学者很容易在传入判断语句的时候将==写成=,而导致代码失误,这时会有什么情况发生呢?
编译器在编译代码的时候是不会报错的,程序可正常运行
程序如何运行
来看一下这段代码:
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
if(a=1) {
printf("if---%d\n",a);
} else {
printf("else---%d\n",a);
}
return 0;
}
如果我输入2,程序会输出什么?
2
if—1
如果我输入0,程序会输出什么?
2
if—1
不管输入什么都会进入if,而且输出的a最后都是if语句中赋值的值了,这是怎么回事?
很明显,如果if语句里面是赋值语句的话,是执行赋值语句,再将赋值语句的最后结果作为判断条件,看是否要进入if语句。
看一下下面的代码:
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
if(a=0) {
printf("if---%d\n",a);
} else {
printf("else---%d\n",a);
}
return 0;
}
赋值为0后,不论你输入什么都是进入else语句了~
例题:
#include<stdio.h>
int main()
{
int a=0,y=10;
if(a=0)
y--;
else if(a>0)
y++;
else
y+=y;
printf("%d",y);
scanf("%d",&a);
}
这道题答案为20,代码执行else语句