Syntax
Ablauf der Verzweigung
break Anweisung
Aktionen im case-Zweig
Beispiel und Übung
Sollen je nach Inhalt einer ganzzahligen Variable verschiedene Anweisungen durchlaufen werden, so kann dies, wie nachfolgend dargestellt, durch geschachtelte if-else Anweisungen erfolgen. Im Beispiel werden je nach Inhalt der Variable var die Anweisungen Aktion1, Aktion2 oder Aktion3 ausgeführt. Enthält var einen anderen Wert als 1,2 oder 3, so werden die Anweisungen Aktion4 ausgeführt. Aber das kennen Sie ja schon von der letzten Lektion her.
if (var == 1) {Aktion1} else if (var == 2) {Aktion2} else if (var == 3) {Aktion3} else {Aktion4} |
Anstelle der oben angegebenen geschachtelten if-else Anweisung kann aber auch die switch-Verzweigung eingesetzt werden. Sie hat folgende Syntax:
| switch (Ausdruck) { case K1: Aktion1 [break;] case K2: Aktion2 [break;] ... case Kx: AktionX [break;] [default: AktionY] } |
Kx müssen ganzzahlige oder char-Konstanten sein. Beachten Sie bitte genau die Syntax! Der Ausdruck in der switch-Anweisung muss in runden Klammern stehen und nach dem Ausdruck folgt immer ein Block {....}.
Der Ablauf der switch-Verzweigung ist nun Folgender:
Das nachfolgende Beispiel entspricht damit der am Anfang dargestellten verschachtelten if-else Anweisung.
switch (var) { case 1: Aktion1 break; case 2: Aktion2 break; case 3: Aktion3 break; default: Aktion4 } .... |
Der default-Zweig ist optional, d.h. er muss nicht zwingend vorhanden sein. Fehlt der default-Zweig und ergibt die Auswertung des switch-Ausdrucks keine Übereinstimmung mit einem der aufgeführten case-Werte, so wird keine Aktion ausgeführt und es geht mit der nächsten Anweisung weiter, die nach der geschweiften Klammer zu des switch-Blocks folgt.
Die break-Anweisung innerhalb eines switch-Blocks bewirkt ein unmittelbares Verlassen des Blocks, d.h. nach dem break wird als nächstes die Anweisung ausgeführt, die nach der geschweiften Klammer zu folgt. Ohne break-Anweisung werden alle nach der Einsprungsmarke (case x:) folgenden Anweisungen bis zum Ende des switch-Blocks ausführt. Sehen Sie sich dazu die beiden nachfolgenden Beispiele so wie die dazugehörigen Ausgaben an:
|
// SWITCH-CASE mit break-Anweisung int var = 2; ... switch (var) { case 1: cout << "Variable gleich 1\n"; break; case 2: cout << "Variable gleich 2\n"; break; case 3: cout << "Variable gleich 3\n"; break; default: cout << "Variable weder 1,2 noch 3\n"; } |
|
Variable gleich 2 |
|
// SWITCH-CASE ohne break-Anweisung int var = 2; .... switch (var) { case 1: cout << "Variable gleich 1\n"; case 2: cout << "Variable gleich 2\n"; case 3: cout << "Variable gleich 3\n"; default: cout << "Variable weder 1,2 noch 3\n"; } |
|
Variable gleich 2 |
Die innerhalb eines case-Zweigs stehenden Aktionen dürfen aus mehreren Anweisungen bestehen. Eine Blockung {...} wie bei der if-Anweisung ist hier nicht notwendig. Innerhalb eines case-Zweigs können beliebige C++ Anweisung stehen mit einer Ausnahme: Sie dürfen hier ohne besondere Vorkehrung keine Variablen definieren! Wollen Sie innerhalb eines case-Zweigs Variablen definieren, so müssen Sie einen entsprechenden Block {....} einfügen, damit die Lebensdauer der Variablen definiert ist.
Und auch das ist möglich: sollen für verschiedene Werte die gleichen Anweisungen ausgeführt werden, so können mehrere case-Zweige aufeinander folgen. Auch die Reihenfolge der case-Anweisungen ist beliebig, d.h. sie müssen nicht in sortierter Reihenfolge angegeben werden.
char alpha; ... switch (alpha) { case 'e': case 'E': Aktion1; break; case 'a': case 'A': Aktion2; } |
Im Beispiel wird die char-Variable alpha ausgewertet. Und unabhängig davon, ob ein e oder a als Groß- oder Kleinbuchstabe in der Variable abgelegt ist, es wird immer die gleiche Aktion ausgeführt.
|
Kleinbuchstaben in Großbuchstaben umwandeln und umgekehrt. Der umzuwandelnde Buchstabe wird als int-Wert übergeben. Beide Funktionen liefern als Returnwert den entsprechenden gewandelten Buchstaben. Handelt es sich beim übergebenen Wert nicht um einen Buchstaben sondern z.B. um die ASCII-Zahl '9', so wird der Originalwert zurückgeliefert. Die Funktion ist in der Header-Datei cctype deklariert, die Sie dann einbinden müssen. |
|
|
Formel nach folgender Syntax eingeben: |
|
// Beispiel zur switch-case Verzweigung // iostream einbinden #include <iostream> using std::cout; using std::endl; using std::cin; // main() Funktion int main () { // Variablen für die Operanden short operand1, operand2; // Variable für den Operator char oper; // Einlesen der Formel cout << "Formel nach folgender Syntax eingeben:\n"; cout << "Operand1 Operator Operand2\n"; cout << "Operator kann sein: + - * /" << endl; cout << "Formel ? "; cin >> operand1 >> oper >> operand2; // Ergebnissausgabe vorbereiten cout << "Ergebnis: "; // Nun den Operator auswerten und die entsprechende // Berechung ausführen switch (oper) { case '+': cout << operand1+operand2; break; case '-': cout << operand1-operand2; break; case '*': cout << operand1*operand2; break; case '/': cout << operand1/operand2; break; default: cout << "Nur die Operatoren +, -, * und / zugelassen!"; } // Zeilenvorschub ausgeben cout << endl; } |
Schreiben Sie ein Programm, das nach dem ohmschen Gesetz
U
= R * I
d.h.
Spannung = Widerstand * Strom
entweder die Spannung, den Widerstand oder den Strom berechnet. Was berechnet werden soll, ist einzulesen (siehe Programmausgabe). Je nach gesuchtem Wert sind dann die beiden anderen Werte einzulesen. Für die einzulesenden Werte sind Gleitkommazahlen zu verwenden.
Die Ausgabe des berechneten Werts soll mit max. 2 Dezimalstellen erfolgen.
|
Widerstand = Spannung/Strom
bzw.
|
|
Sie können nun mit Hilfe des Ohmschen Gesetzes |