To wydruki 4. Dlaczego?

Jestem świadomy, jak działają operatorzy TERNARY, ale to sprawia, że to skomplikowane.

printf("%d", 0 ? 1 ? 2 : 3 : 4 );

Również to wydruki d. ???

int x=0, y=1 ;
printf( "d", x ? y ? x : y : x ) ;
-1
Loga 5 czerwiec 2018, 13:45

7 odpowiedzi

Najlepsza odpowiedź

Po pierwszym, jego operator terenary "zagnieżdżonej". Włączyłbym wokół niego nawiasy, aby uczynić go bardziej dekodowanym. Rozważmy 0 ? 1 ? 2 : 3 : 4, pozwala przekształcić to 0 ? (1 ? 2 : 3) : (4) 0? inaczej części wykonuje, który jest 4

Dla drugiego brakuje ci %d

2
Bathsheba 5 czerwiec 2018, 11:10

Rozbij go z if..else oświadczenie

if(0){
    if(1)
        printf("%d\n", 2); 
    else
        printf("%d\n", 3);
} 
else
    printf("%d\n", 4);
1
haccks 5 czerwiec 2018, 10:54

Że rzeczywiście powinien drukować 4. Operator therary działa w następujący sposób:

(condition) ? expression1 : expression2

Jeśli warunek ocenia się na true expression1 jest zwracany i w przeciwnym razie zwrócono expression2. W twoim przypadku struktura jest następująca:

0?(1?2:3):4 I.e tutaj 1?2:3 jest wyrażenie1, 4 jest wyrażenie2, a w miejscu stanu mamy 0. Jak możesz znać 0 w warunkach ocenia się fałszywą i dowolną niezerową wartością ocenę na prawdziwe. Tak więc, ponieważ warunek jest fałszywy (i.e {x5}}) wyrażenie2 (4) jest zwracany.

1
Chris Aby Antony 5 czerwiec 2018, 10:55
0 ? 1 ? 2 : 3 : 4

Analizowany jako A.

(0 ? (1 ? 2 : 3) : 4)

Więc masz wyjście jako 4.

1
msc 5 czerwiec 2018, 11:01
printf("%d", 0 ? 1 ? 2 : 3 : 4 );

Tutaj specyfikator formatu jest "% d", więc drukuje prawidłową wartość 4. ale, w

int x=0, y=1 ;
printf( "d", x ? y ? x : y : x ) ;

Tutaj nie ma specyfikatora formatu, więc po prostu wydrukowano "D" i zignorował inny parametr.

1
Stephen Kennedy 5 czerwiec 2018, 11:58

Terrary operatorzy są jak inaczej. Jeśli dodajesz nawiasy do swojego kodu, robi się prostsze:

0 ? (1 ? 2 : 3) : 4

Pamiętaj, że w C zero oznacza fałszywe, wszystkie niezerowe oznacza prawdziwe. Tak więc powyżej oświadczenie nie powiedzie się w testach i zwraca trzecią część, czyli 4.

1
yvw 1 luty 2019, 22:41

W oświadczeniu masz wielu operatora trójskiego printf("%d", 0 ? 1 ? 2 : 3 : 4 );

A gdy w historii tego samego operatora przychodzi wiele razy, do których użyliśmy do sprawdzenia associativity, który pochodzi z Right do {{x2} Albo widzisz to w man 1 operator

Pierwszy wybór prawy operator thernary 1 ? 2 : 3, który powoduje 2. Teraz 3 zniknął.

Teraz staje się 0 ? 2 : 4, co powoduje 4. Dlatego drukuje 4.

Uwaga: - , jak wspomniano o innym, z właściwym asortymentem operatora Terrary, możesz je układać i zbudować wyrażenie if-else, podobnie:

if(0){ if(1) printf("%d\n", 2); else printf("%d\n", 3); } else printf("%d\n", 4);

0
Achal 5 czerwiec 2018, 11:19