C/C++ if語句中出現賦值語句

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章