Die bedingte Ausführung in C++
Syntax der bedingten Ausführung
.--. .--. .----------. .--. .-----------.
--->( if )--->( ( )--->| Ausdruck |--->( ) )--->| Anweisung |--->
'--' '--' '----------' '--' '-----------'
Nach ihrem einleitenden Schlüsselwort if wird die Anweisung zur bedingten Ausführung auch if-Anweisung oder kurz „if “ genannt.
Die Anweisung hinter der runden Klammer zu »)« nennen wir auch die innere Anweisung der if-Anweisung.
“if ” /ɪf/ „wenn“
Semantik (Verhalten) der bedingten Ausführung
Bei der Ausführung einer Anweisung dieser Art wird zunächst der Ausdruck ausgewertet.
Die Anweisung wird genau dann ausgeführt, wenn die Auswertung nicht den Wert 0 ergab.
Beispiel
Das folgende Programm zeigt, wie die if-Anweisung Ausdrücke auswertet.
main.cpp
#include <iostream>
#include <ostream>
#include <string>
#include <cstdio>int main()
{ if( ::std::cout << "Hallo, Welt" << "\n" ){}
if( ::std::cout << "Anton" << "\n" ){}
if( ::std::cout << "Berta" << "\n" ){}
if( ::std::putchar( 65 ) ){}
if( 0 ){}
if( 1 + 1 ){} }::std::cout
Hallo, Welt
Anton
Berta
A
Mit Hilfe der if-Anweisung läßt sich belegen, daß es falsch ist, zu sagen, daß jede Anweisung in C++ mit einem Semikolon abgeschlossen wird, wie man manchmal lesen kann. Denn das voranstehende Programm enthält mehrere Anweisungen, aber kein einziges Semikolon!
Beispiel
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
int main()
{ if( 0 )::std::cout << 0 << "\n"s;
if( -2 )::std::cout << -2 << "\n"s; }::std::cout
-2
Die Anweisung wird also nur unter einer bestimmten Bedingung ausgeführt – sie wird bedingt ausgeführt.
Beispiel
main.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
void kehrwert_ausgeben( double const x )
{ if( x ){ ::std::cout << 1/x << "\n"s; return; }
::std::cout << "undefiniert\n"s; }int main()
{ kehrwert_ausgeben( 2 );
kehrwert_ausgeben( 1 );
kehrwert_ausgeben( 0 ); }::std::cout
0.5
1
undefiniert
Die Ausführung von »return;« in einer void-Funktion beendet die Ausführung jener Funktion. Dadurch wird im obigen Programm »undefiniert« nur ausgegeben, falls »x« gleich »0« ist. Insofern ist die früher gegebene Erklärung, derzufolge es keinen Sinn hat, in einer Funktion hinter eine return-Anweisung noch etwas zu schreiben, nun hinfällig.
Übungen
- Bedingte Ausführung
Der folgende Programmteil soll sowohl den Text "a" als auch den Text "b" nur dann ausgeben, wenn x ungleich 0 ist.
Steuerung zweier Anweisungen [Struktogramm]
.-------------------------------------.
| Ist x ungleich 0 ? |
| |
| Ja | Nein |
|--------------------|----------------|
| Ausgabe von "a" | |
|--------------------| |
| Ausgabe von "b" | |
'-------------------------------------'
- Wieso funktioniert das nicht?
- Was geschieht stattdessen wirklich?
- Wie könnte die angestrebte Funktionalität mit möglichst wenig Änderungen am Quelltext erreicht werden?
Steuerung mehrerer Anweisungen
if( x )
::std::cout << "a"s;
::std::cout << "b"s;- Beispiel Korrektur *
Ein Student erklärt: „Bei der If-Schleife wird die Anweisung nach »if( x )« nur dann ausgeführt, wenn der Wert »x« positiv ist.”. Korrigieren Sie eventuelle Fehler des Studenten!
Graphische Darstellungen Struktogramme *
Das folgende Struktogramm (gemäß DIN 66261 nach Nassi und Shneiderman ACM SIGPLAN Notices 8, August 1973) zeigt die Darstellung der folgenden C++ -Anweisung als Struktogramm.
- C++ -Anweisung
if( n )::std::cout << "*"s;
- Struktogramm
.-----------------------------------------.
|'-. .-'|
| '-. .-' |
| '-. n .-' |
| '-. .-' |
| nicht 0 '-. .-' 0 |
| '-. .-' |
|------------------'-.-'------------------|
| Ausgabe "*" | |
'-----------------------------------------'- Struktogramm (vereinfachte Form)
.-----------------------------------------.
| n ? |
| nicht 0 | 0 |
|--------------------|--------------------|
| Ausgabe "*" | |
'-----------------------------------------'