我們習慣了向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語句