2011-02-13 86 views
3

這是一個c程序。我得到一個奇怪的輸出。我在C中得到一個奇怪的輸出?

當NUM1 = 10和NUM2 = 20->

#include<stdio.h> 
void main() 
{ 
int num1=10,num2=20; 
clrscr(); 
if(num1,num2) 
{ 
    printf("TRUE"); 
} 
else 
{ 
    printf("FALSE"); 
} 
getch(); 
} 

輸出: TRUE

當NUM1 = 0和NUM2 = 220 輸出: TRUE

但當NUM1 = 0和num2 = 0: 輸出: 錯誤 這是爲什麼發生? 還,這是什麼下面的代碼給出的意思:

if(num1,num2) 

提前感謝!

回答

3

您正在使用comma operator。該操作員首先評估其第一個操作數,然後將結果放在地板上並繼續評估並返回其第二個操作數。

這就是爲什麼你的程序只打印FALSE如果num2計算結果爲false在布爾環境(例如像00.0NULL)。

0
if(num1,num2) 

不是語法錯誤,但它是一個邏輯錯誤。基本上,這將解決爲僅

if(num2) 

只評估最後一個變量。

+2

`num1`實際上是評估的,但其值隨後被忽略。 – 2011-02-13 11:28:24

2

在:

if(num1,num2) 

最後一個表達式將覆蓋所有那些前述所以這是一樣的:

if(num2) 

以來,NUM2是0,你就會得到FALSE。

如果你看看這個, http://msdn.microsoft.com/en-us/library/2bxt6kc4(v=vs.71).aspx 的,代表順序計算,這意味着表達式求一個又一個,最後被你NUM2。

2
  1. 瞭解有關逗號運算符c http://en.wikipedia.org/wiki/Comma_operator的信息。 i =(a,b)表示在i中存儲b。
  2. c中的其他一切都不是0。 所以如果(3)如果(-3)都是真 僅當(0)是假的
0

我假設你想要的是'如果a和b是真的'。像你一樣使用逗號來評估最後一個變量。

我想你想的是:

if(num1 && num2) /* num1 AND num2 */ 

您需要使用& &(邏輯AND)不是一個單一的&(這是按位與)

1
if(num1,num2) 

是一種利用逗號運算符。逗號運算符計算第一個操作數並放棄結果,然後放棄第二個操作數並返回結果。因此(a, b)計算a,計算b然後返回b。

這應該會消除您對邏輯情況的困惑,在每個邏輯情況下,該聲明具有查看b值的效果。