10.6 Bedingungsoperator ?:
 
Der Bedingungsoperator ?: ist ein ternärer Operator (der einzige in ANSI C). Im Prinzip repräsentiert dieser Operator nichts anderes als eine Kurzform der if else-Anweisung. Hier die Syntax:
<BEDINGUNG> ? <ANWEISUNG 1> : <ANWEISUNG 2>
Wenn die BEDINGUNG wahr ist, wird die ANWEISUNG1 ausgeführt. Ansonsten wird ANWEISUNG2 ausgeführt. Der Programmablaufplan ist identisch mit dem der if else-Anweisung. Sie benötigen beispielsweise von zwei Zahlen den höheren Wert. Mit dem Bedingungsoperator ? : könnten Sie folgendermaßen arbeiten:
max = (a>b) ?a :b;
Diese Schreibweise ist äquivalent zu der folgenden:
if(a > b)
max=a;
else
max=b;
Ein Listing:
/* max_val.c */
#include <stdio.h>
int main(void) {
int a=5,b=10;
int max;
max = (a > b) ? a : b;
printf("Der größte Wert ist %d \n", max);
return 0;
}
Natürlich ist es auch hier möglich, die einzelnen Ausdrücke ineinander zu verschachteln:
/* more_max_val.c */
#include <stdio.h>
int main(void) {
int a=8, b=3, c=76, big;
printf("Die größte Zahl ist....");
big = (a>b) ? ((a>c) ?a :c) : ((b>c) ?b :c);
printf("..%d\n", big);
return 0;
}
Auch hier kann bei mehrfacher Verschachtelung die Übersichtlichkeit und Nachvollziehbarkeit des Programms leiden. Hier wären if else-Anweisungen besser geeignet. Sehen Sie sich folgende Codezeile näher an:
big = (a>b) ? ((a>c) ?a :c) : ((b>c) ?b :c);
Bevor die Variable big einen Wert zugewiesen bekommt, werden zuerst folgende Bedingungen überprüft: Ist der Wert von a größer als der von b, wird überprüft, ob der Wert von a auch größer als der von c ist. Ist das der Fall, so ist a der größte Wert. Ist dies nicht der Fall, ist c der größte Wert. Sollte aber in der ersten Bedingung a nicht größer als b sein, so wird überprüft, ob b größer als c ist. Ist b größer als c, haben Sie den größten Wert gefunden. Ist b nicht größer als c, bleibt nur noch c als größte Zahl übrig.
Häufig wird der Bedingungsoperator auch wie folgt verwendet:
printf("Bitte geben Sie eine Zahl ein: ");
scanf("%d",&zahl);
printf("Die Zahl, die Sie eingegeben haben, ist ");
(zahl%2) ? printf("ungerade \n") : printf("gerade \n");
|