2012-05-14 195 views
3

可能重複:
The ternary (conditional) operator in C這是做什麼用的?

這是我的老師幫助的代碼示例。我不知道total = total*2+ (n=='1'? 1:0);做什麼。我認爲它將總數乘以2,但問號和1:0比率是多少?

int bcvt(FILE *infile){ 
    char n; 
    int i, total=0; 
    for(i=0; i<32; i++){  
    fscanf(infile, "%c", &n); 
    total = total*2+ (n=='1'? 1:0); 
    } 
    char dummy; 
    fscanf(infile, "%c", &dummy); 
    return total; 
} 
+0

我甚至不知道從哪裏開始搜索或要搜索的關鍵字。謝謝sixlettervariables –

+0

沒問題。每個新來的C/C++人都會被稱爲它的東西絆倒。 – user7116

+0

@CarlNorum,給他休息一下,搜索三元運算符很困難,因爲你需要知道它是第一個被稱爲三元運算符的......多年前我有完全相同的問題,最終我通過搜索「問號運算符「。 – verdesmarald

回答

1

它與if語句類似。 取決於是否滿足條件

n=='1'

是真還是假,操作將返回左側:真正的,右側爲假(10)。

值可以是任何值。 1和0在這裏是隨機的。

if (n == '1') { 
    return 1; 
} 
else { 
    return 0; 
} 
+2

不,這是不一樣的。使用三元運算符是表達式的一部分,併產生一個值。一個'if'語句不會。 –

+0

你說得對,讓我編輯一下。 – hermann

+0

s/random /任意/ –

0

這裏的條件運算符是這樣做的:「如果n等於1,則使用1,否則使用0」。所以它會根據n的值將第一個表達式加1或0。

這是編寫if/else語句的另一種方法。

3

聲明

(n=='1'? 1:0) 

相當於

if (n == '1') return 1 
else return 0 

所以返回1,如果n是 '1',否則爲0。

格式是:

(expression ? if-true-return-this-value : else-return-this-value) 
+0

值得一提的是,C:'n =='1''中的三元部分是多餘的就足夠了。 –

0

這個表達式 「(N == '1'?1:0)」 等同於if (n == '1') return 1; else return 0; 如上所述,它是在C的三元(有條件的)操作員

而我猜你的代碼正在加載,然後將二進制字符串「0001010」轉換爲整數。