Es gibt diverse Gründe, warum ein Programm in Abhängigkeit von Variablen bestimmte Operationen nicht ausführen soll. Hier sind ein paar typische Beispiele zusammengestellt:
Das Programm soll in all diesen Fällen in Abhängigkeit von einem Variableninhalt seinen Ablauf ändern. Dazu brauchen wir einen Befehl, der unter einer Bedingung eine Anweisung oder einen Anweisungsblock ausführt. Um die Bedingung zu formulieren brauchen wir Operatoren, mit denen wir Werte vergleichen können.
Folgende Sätze wären Bedingungen, die man
Wenn eine Frau ihren Mann aus dem Fenster wirft, liest man das in der Kronen-Zeitung. Wenn ein Mann seine Frau aus dem Fenster wirft, liest man das in Schöner Wohnen.
Zitat unbekannter Herkunft.
Mit dem Befehl »if« ist es möglich, eine Befehlssequenz unter einer Bedingung auszuführen. Das Schlüsselwort if kommt aus dem Englischen und bedeutet »falls« oder »wenn«. Der Syntax einer einfach if-Verzweigung sieht folgendermaßen aus:
if( «Bedingung» ){ «Anweisungen»; }
Dem Schlüsselwort if folgt eine Klammer, in der die Bedingung formuliert wird, unter der der nachfolgende Anweisungsblock ausgeführt wird. Ein Anweisungsblock ist entweder eine einzelne Anweisung oder mehrere Anweisungen, die durch geschweifte Klammern zusammengefasst werden.
int Gemeindeeinwohner=12000; if (Gemeindeeinwohner > 10000) { cout << "Diese Gemeinde ist eine Gemeinde mit Stadtrecht!" << endl; }
Es hat sich bewährt, Anweisungen, die unter Bedingungen oder in Schleifen ausgeführt werden, einzurücken. Einige Programmeditoren führen dies automatisch durch. Für das Einrücken können die Tabulatortaste oder Leerzeichen verwendet werden.
if (Divisor != 0) { Ergebnis = Dividend / Divisor; }
Die Division wird nur durchgeführt, wenn die Bedingung zutrifft, also der Divisor ungleich 0 ist.
Die Anweisung, die hinter der if-Bedingung steht, kann selbst wieder eine if-Anweisung sein. Sie wird nur ausgeführt, wenn die erste if-Bedingung eintritt. Eine solche Folge von Abfragen nennt man Verschachtelung.
int a=0, b=0; int c=2; if (a==0) if (b==0) c=0; cout << c << endl;
Die Abfrage, ob die Variable b 0 enthält, wird nur gestellt, wenn die Variable a den Inhalt 0 hat. Nur wenn beide Variablen 0 sind, wird die Variable c auf 0 gesetzt. Ansonsten enthält sie weiterhin 2.
Kehren wir zum Divisionsbeispiel zurück. Es wäre schön, wenn das Programm nicht nur prüft, ob der Divisor ungleich 0 ist, sondern den Anwender darüber informieren würde, dass es die Division gar nicht durchführt. Diese Meldung sollte genau dann erscheinen, wenn die if-Bedingung nicht zutrifft. Das könnten Sie erreichen, indem Sie zwei gegensätzliche if-Konstruktionen hintereinander setzen:
if (Divisor != 0) Ergebnis = Dividend / Divisor; if (Divisor == 0) cout << "Divisor ist 0! Keine Berechnung!";
Da solche Konstruktionen immer wieder gebraucht werden, bietet C++ einen eigenen Befehl an, um den gegenteiligen Fall der Bedingung abzudecken. Das Schlüsselwort dazu heißt else.
if (Divisor != 0) Ergebnis = Dividend / Divisor; else cout << "Divisor ist 0! Keine Berechnung!";
Die Abfrage mit if ermöglicht die Unterscheidung zweier Fälle. Wenn auf Grund verschiedener Werte unterschiedliche Anweisungen ausgeführt werden sollen, können mehrere verschachtelte if-Anweisungen hintereinander gesetzt werden oder es kann eine spezielle Fallunterscheidung verwendet werden. Ein schönes Beispiel ist ein Fahrstuhl in einem Kaufhaus, in dem eine Vielzahl von Stockwerken zur Auswahl stehen und in jedem Stockwerk andere Waren angeboten werden. Zunächst wird die Aufgabe durch kaskadierende if-Anweisungen gelöst:
if (Stockwerk == 1) { cout << "Süssigkeiten, Bücher" << endl; } else if (Stockwerk == 2) { cout << "Bekleidung" << endl; } else if (Stockwerk == 3) { cout << "Bekleidung" << endl; } else if (Stockwerk == 4) { cout << "Spielzeug" << endl; } else if (Stockwerk == 5) { cout << "Unterhaltungselektronik" << endl; } else { cout << "Garage" << endl; }
Diese Konstruktion lässt sich durch die Mehrfachverzweigung vereinfachen.
int Stockwerk; cin >> Stockwerk; switch (Stockwerk) { case 1: cout << "Süssigkeiten, Bücher" << endl; break; case 2: cout << "Bekleidung" << endl; break; case 3: cout << "Bekleidung" << endl; break; case 4: cout << "Spielzeug" << endl; break; case 5: cout << "Unterhaltungselektronik" << endl; break; default: cout << "Garage" << endl; break; }
Die Fallunterscheidung beginnt mit dem Schlüsselwort switch. In der darauf folgenden Klammer steht der ganzzahlige Ausdruck, dessen Ergebnis die Verzweigung steuert. Ein Ausdruck kann eine Variable sein, wie im Beispiel die Variable Stockwerk. Hier könnte aber auch eine Berechnung stehen, die zu einem ganzzahligen Ergebnis führt. Es können auch Buchstaben verwendet werden, da Buchstaben aus Sicht von C++ letztlich nichts anderes als getarnte Zahlen sind. Im Beispiel wird die Variable Stockwerk ausgewertet, die offensichtlich eine ganze Zahl aufnehmen kann.