2017-02-03 3 views
0

-Codenicht in der Lage die Ausgabe von ternären Operator

#include<stdio.h> 
main() 
{ 
    int big, x = 3, y = 2, z = 1, q = 4; 

    big = (x > y 
     ? (z > x ? 20 : 10 && x > y ? 85 : 12) 
     : (y > z ? 40 : 10 || x < q ? 30 : 10) 
    ); 

    printf("\nbig =%d", big); 
    //getch(); 
} 

Ouput 85 Aber Iam nicht sicher zu bekommen, wie es Hilfe funktioniert mich, es zu verstehen ..

+2

Bitte verschachteln Sie ternäre Aussagen nicht so, es ist praktisch nicht lesbar. Ihre Kollegen werden es Ihnen danken, dass Sie sie in mehreren Anweisungen geschrieben haben, die leicht visuell analysiert werden können! –

Antwort

2

&& hat eine höhere Priorität als ?:.

big=(x>y?(z>x?20:10 && x>y?85:12): (y>z?40:10 || x<q?30:10));` 

als

big=(x>y?(z>x ? 20: ((10 && x>y) ?85:12)): (y>z ? 40: (10 || x<q?30:10))); 

Da x größer als y wird so analysiert werden 20: (10 && x>y?85:12) ausgeführt werden. Sowohl 10 als auch x > y werden zu true ausgewertet, (10 && x>y) ?85:12) ergibt 85.

0

ich es umschreiben ein wenig klar (vorausgesetzt, Sie wissen, was eine einfache ternäre ist):

#include<stdio.h> 

main(){ 
int big,x=3,y=2,z=1,q=4; 
if(x>y){ 
    int tmp1 = (z > x) ? 20:10; 
    int tmp2 = (x > y) ? 85:12; 
    big= (tmp1>=tmp2) ? tmp1:tmp2; 
}else{ 
    int tmp1 = (y > z) ? 40:10; 
    int tmp2 = (x > q) ? 30:10; 
    big = (tmp1<=tmp2) ? tmp1:tmp2; 
} 
printf("\nbig =%d",big); 
} 

Die eine komplizierte Erklärung ist die Auswertungen von: (ein & & b) => geben die max zwischen a und b (a || b) => zurück die min zwischen a und b

hoffe ich antwortete.

Verwandte Themen