if語句裡面如果是賦值語句
阿新 • • 發佈:2018-12-14
我們習慣了向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,程式會輸出什麼? 如果我輸入0,程式會輸出什麼?
好像不管輸入什麼都會進入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語句了~
還是建議不要在if語句中使用賦值語句,這樣程式不會報錯,很容易帶來超出預期的結果。