2013-07-09 50 views
3

如果有人能解釋這一點,這將是有益的。的這個在「if」條件下分配零時會發生什麼?

int main() 
{ 
int a=0; 
if(a=0) 
     printf("a is zero\t"); 
else 
     printf("a is not zero\t"); 
printf("Value of a is %d\n",a); 
return 0; 
} 

輸出是

a is not zero Value of a is 0 
+5

您的代碼行出錯:'if(a = 0)'應該是'if(a == 0)'。 – STLDeveloper

+0

您使用賦值運算符而不是比較運算符== –

+0

您必須闡明您想要解釋的內容。代碼功能很簡單。而且,從你的問題的標題來看,你似乎已經明白'if'下的'a = 0'是一項任務,而不是比較。那麼問題是什麼? – AnT

回答

25

分配的結果是表達的值。

因此:

if (a = 0) 

相同:

if (0) 

這是一樣的:

if (false) 

這將迫使else路徑。

+3

+1;似乎這是解決核心問題的唯一答案。 – Makoto

+0

+1很好的解釋。 – STLDeveloper

+0

@Makoto是的,正是人們忘記了解決OP的真實意圖時急着寫答案:)我也是+1。 :) – 0decimal0

0

if(a=0)是在變量a0的分配。如果你想比較a對零,你需要寫像下面 if(a==0)

你的條件是正在a爲零所以條件得到錯誤的,你是從else部分入門打印簡單的任務。

+0

OP不需要==。 OP已經非常明確地表明分配是有意的。 –

+0

@JimBalter你知道嗎,這就是爲什麼我已經給出了條件失敗的原因,以及爲什麼從其他部分打印。我建議比較也只是爲了安全一面。 –

5
if(a=0) 
     printf("a is zero\t"); 
else 
     printf("a is not zero\t"); 

這些消息正好倒過來。如果條件 0執行if後的聲明,並在條件 0,則執行ELSE後面的語句,所以這應該是

if(a=0) 
     printf("a is not zero\t"); 
else 
     printf("a is zero\t"); 

,或等效但更明確地,

a = 0; 
if(a) 
     printf("a is not zero\t"); 
else 
     printf("a is zero\t"); 
+0

哈哈哈,沒有注意到這一點,因爲我們主要關心printf的執行情況,而不是它打印的內容:) upvoted :) – 0decimal0

+0

謝謝..我明白,重新分配實際上是指向真值。 – Ani

+1

@PHI創始人我知道,在程序員那裏有多少人不會注意細節。感謝您的支持。我認爲,如果我已經破產了一些東西,而不是花時間去做正確的事情,我會得到更多的信息.​​.....當接受的答案發布時,我仍然在寫作。 –

0

如果()函數接受真或假值作爲參數。

所以無論你放在括號裏面對if()函數沒有任何意義,但事實上它有什麼價值。

在任何情況下,「0」會被視爲假值,所以當你傳遞0像一個說法:

if(0) 
{ 
    ---statments--- 
} 

不會得到執行的語句部分,並且系統會直接跳轉到別的部分。

如果您提到您將變量賦值爲0並將其作爲參數傳遞給if()。 請注意,如果()只接受0或非0值。所以,你做出的任務並不重要。 if()將接收變量'a'的值作爲參數並相應地執行。

在這種情況下,由於a的值爲0,所以if部分不會被執行,系統將跳轉到else。

相關問題