2016-06-16 83 views
1
while(*p!='\0' && *q!='\0') 
{ 
     if(*p==*q) 
     { 
       p++; 
       q++; 
       c++; 
     } 
     else 
     break; 
} 

我已經寫了這個使用三元運算符,但爲什麼它給錯誤語句的錯誤?爲什麼break不能和三元運算符一起使用?

*p==*q?p++,q++,c++:break; 

gcc編譯器給出了這樣的錯誤:「休息」

+11

因爲'break;'是一個語句,而不是表達式。 – MikeCAT

+1

雖然指針運算通常很好,並且是其他語言所具有的C特性之一,但它並不總是最好的解決方案。如果重新組織循環以使用'size_t i'作爲迭代器,則代碼會更好,而不會在任何合理的體系結構上丟失性能。 – EOF

+1

[爲什麼我不能在C++的三元條件語句中使用「break」語句?](http://stackoverflow.com/questions/28642693/why-cant-i-use-a-break- statement-in-a-ternary-conditional-statement-in-c) – Twahanz

回答

6

之前預期的表現當您使用三元運算符,它不像一個if。三元運算符具有以下形式:

(condition ? expression_if_true : expression_if_false); 

這兩個表達式必須具有相同的類型,否則,使無義。

而且如Thilo所說,你不能在這個運算符中使用語句,只能表達式。這是因爲根據條件,整個三元運算符必須是一個表達式。

+3

和'休息'根本不是一個表達。 – Thilo

1

的語法是:

(condition ? expr_true : expr_false); 

expr_trueexpr_false必須有共同的類型(這將是三元運算的結果)。 另外,當然,break不是一個表達式,它是一個聲明。

相關問題