Der ternäre Operator in C (Der ternäre Operator in C), Lektion, Seite 723830
https://www.purl.org/stefan_ram/pub/ternaerer_operator_c (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C-Kurs

Der ternäre Operator in C 

Es ist möglich, genau einen  von zwei Ausdrücken, die hinter einem Fragezeichen »?« stehen und durch einen Doppelpunkt »:« getrennt sind, auszuwerten.

Beispiel einer Anwendung des ternären Operators

1
?

"wahr" : "falsch"

Die erste Auswertung

Zuerst wird der Ausdruck vor dem Fragezeichen 1« in dem obigen Beispiel) ausgewertet.

Dieser kann „wahr“ (ungleich »0«) oder „falsch“ (gleich »0«) sein. – Wir bezeichnen hier zur Vereinfachung der Sprechweise alle Zahlen, außer Null, als „wahrartig “ (oder – kurz – als „wahr “) und die Zahl Null als „falschartig “ (oder – kurz – als „falsch “).

Der Fall „wahr“

Ergibt die Auswertung des Ausdrucks vor dem Fragezeichen nicht  »0«, so wird der Ausdruck vor dem Doppelpunkt "wahr"«) ausgewertet.

Auswertung des Ausdrucks vor dem Doppelpunkt
.---------- 1
| ?
|
'--> "wahr" : "falsch"

Der Wert des gesamten Ausdrucks wird dann der Wert des zuletzt ausgewerteten Ausdrucks, also des Ausdrucks vor  dem Doppelpunkt.

main.c

#include <stdio.h>

int main( void )
{ printf( "%s\n",

1
?

"wahr" : "falsch"

); }

Protokoll
wahr

Der Fall „falsch“

Ergibt die Auswertung des Ausdrucks vor dem Fragezeichen »0«, so wird der Ausdruck hinter dem Doppelpunkt "falsch"«) ausgewertet.

Auswertung des Ausdrucks hinter dem Doppelpunkt
       0 ------------.
? |
|

"wahr" : "falsch" <--'

Der Wert des gesamten Ausdrucks wird dann der Wert des zuletzt ausgewerteten Ausdrucks, also des Ausdrucks hinter  dem Doppelpunkt.

main.c

#include <stdio.h>

int main( void )
{ printf( "%s\n",

0
?

"wahr" : "falsch"

); }

Protokoll
falsch

Übungsfragen

?   Übungsfrage 0

Welche Ausgabe erzeugt das folgende Programm?

main.c

#include <stdio.h>

int main( void )
{ printf( "%d\n",

0
?

1 : 2

); }

?   Übungsfrage 1

Welche Ausgabe erzeugt das folgende Programm?

main.c

#include <stdio.h>

int main( void )
{ printf( "%d\n",

-1
?

2 : 3

); }

?   Übungsfrage 2

Welche Ausgabe erzeugt das folgende Programm?

main.c

#include <stdio.h>

int main( void )
{ printf( "%s\n",

2
?

"L" : "R"

); }

?   Übungsfrage 3

Welche Ausgabe erzeugt das folgende Programm?

main.c

#include <stdio.h>

void f(){ printf( "f\n" ); }
void g(){ printf( "g\n" ); }

int main( void )
{

0
?

f() : g()

; }

?   Übungsfrage 4

Welche Ausgabe erzeugt das folgende Programm voraussichtlich?

main.c

#include <stdio.h>

int f(){ printf( "f\n" ); return 1; }

int main( void )
{

f()
?

4 : -6

; }

?   Übungsfrage 5

Welche Ausgabe erzeugt das folgende Programm voraussichtlich?

main.c

#include <stdio.h>

int f(){ printf( "f\n" ); return 0; }

int main( void )
{

f()
?

4 : -6

; }

?   Übungsfrage 6

Welche Ausgabe erzeugt das folgende Programm voraussichtlich?

main.c

#include <stdio.h>

int main( void )
{ int x = 2 - 3;

int y =

x
?

7 : 5

; printf( "%d\n", y ); }

?   Übungsfrage 7

Welche Ausgabe erzeugt das folgende Programm voraussichtlich?

main.c

#include <stdio.h>

void f( int const x )
{ printf( "%s\n",

( x - 4 )
?

"q" : "p"

); }

int main( void )
{ f( 3 );
f( 4 );
f( 5 ); }

Übungsaufgaben

/   Übungsaufgabe 0

Schreiben Sie eine Funktion, welche die Zeichenfolge »n« ausgibt, wenn sie mit »0« aufgerufen wird, und die Zeichenfolge »s« sonst.

/   Übungsaufgabe 1

Schreiben Sie eine Funktion, welche die Zeichenfolge »n« ergibt, wenn sie mit »0« aufgerufen wird, und die Zeichenfolge »s« sonst.

 /   Übungsaufgabe 2

Schreiben Sie eine Funktion, die mit fünfzigprozentiger  Wahrscheinlichkeit die Zeichenfolge »Kopf« zurückgibt, und sonst »Zahl«.

/   Übungsaufgabe 3

Schreiben Sie eine Funktion, die eine Temperatur vom Typ »int« als Argument akzeptiert und die Zeichenfolge »ok« zurückgibt, wenn die Temperatur unter 25 liegt, und sonst »zu heiss!« (an Stelle des Doppel-S darf auch ein Eszett verwendet werden.). Es kann davon ausgegangen werden, daß die an die Funktion übergebene Temperatur zwischen 0 und 99 liegt.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723830 stefan_ram:723830 Der ternäre Operator in C Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723830, slrprddef723830, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/ternaerer_operator_c