![]() Vorherige Seite |
![]() Eine Ebene hoch |
![]() Nächste Seite |
---|
Die bedingte Anweisung
if(a>b) z = a; else z = b;
(Ermittlung des Maximalwertes) kann verkürzt wie folgt ausgedrückt werden:
z = (a>b) ? a : b;
(Wenn a größer als b ist, soll z den Wert von a erhalten, andernfalls den Wert von b.) Allgemein ausgedrückt:
Ausdr1 ? Ausdr2 : Ausdr3
Als erstes wird Ausdr1 ausgewertet. Ist das Ergebnis ungleich null, also wahr, so wird der Ausdr2 bewertet und das Ergebnis zurückgegeben. Ist das Ergebnis von Ausdr1 gleich null, so wird Ausdr3 bewertet und dessen Ergebnis zurückgegeben. Der jeweils andere Ausdruck wird nicht ausgewertet.
Es gelten die gleichen Regeln für die Typumwandlung wie bei binären Operatoren (siehe Abschnitt 2.6.1).
Beispiel: Das folgende Programm berechnet die Quadratzahlen von null bis i_max-1. Dabei soll nach zehn Zahlen und am Ende ein Zeilenvorschub, ansonsten nach jeder Zahl ein Leerzeichen eingefügt werden.
for(i=0; i<i_max; i++) { printf("%d", i*i); if(i%10==9 || i==i_max-1) printf("\n"); else printf(" "); }
Die drei printf-Befehle können mit einem bedingten Ausdruck zusammengefasst werden:
for(i=0; i<i_max; i++) printf("%d%c", i*i, (i%10==9 || i==i_max-1) ? '\n' : ' ');
Eine anderes Beispiel ist:
printf("Sie haben %d Teil%s.\n", n, (n==1) ? "" : "e");
Der bedingte Operator hat einen sehr geringen Vorrang, daher könnten die Klammen um den Ausdruck vor dem Fragezeichen weggelassen werden. Der Übersicht halber sollten aber die Klammern um die Bedingung gesetzt werden.