2012-08-22 63 views
1

可能重複:
Error: lvalue required in this simple C code? (Ternary with assignment?)使用在表達托架包括三元運算

在下面的代碼段我得到一個錯誤,如「lvalue required as left operand of assignment」。我無法理解爲什麼會報告這樣的錯誤。但是當我在表達式(i>j)?(k=i):(k=j)中使用括號時,它不報告錯誤。請解釋。

int main() { 
    int i = 2; 
    int j = 9; 
    int k; 

    (i>j) ? k=i : k=j; 
    printf("%d\n",k); 
    return 0; 
} 
+0

看看Nawaz的答案:http://stackoverflow.com/questions/6966299/error-lvalue-required-in-this-simple-c-code-ternary-with-assignment – phoxis

回答

2

很明顯,這種情況下可以以更好的方式重寫,但你的問題是因爲觀察到的=?:運營商優先解決它。

賦值運算符?:的優先級高於=,從而

((i > j) ? k = i : k) = j; 

表達

(i > j) ? k = i : k = j; 

就相當於這是不正確的,因爲你不能分配給表達式的結果。

事實上,這種情況與((i > j) : i : j) = 10;類似,也是不正確的。

1

如何寫這樣的。

int main() 
{ 
    int i,j,k; 
    i=2;j=9; 
    k = (i > j) ? i : j; 
    printf("%d\n",k); 
    return 0; 
} 
0

相反:

k = i > j ? i : j; 
0

您需要分配該運營商的返回值。 三元運算符的語法如下..

result = condition ? first_expression : second_expression; 

你在你的代碼所缺少.. 所以,你可以簡單地把它像下面..

int k = (i > j) ? i : j; 
3

沒有你額外的()S,我覺得運算符優先級分組作爲

((i>j)?k=i:k)=j;

這顯然不是什麼喲你想要並且有左值問題。

k= (i>j) ? i : j;