Das Ziel eines switch-case
Konstrukts ist es, einen Ausdruck gegen eine größere Auswahl von Konstanten zu vergleichen und dann dementsprechend für jede Möglichkeit etwas anderes auszuführen. Die C++ Schlüsselwörter, die wir in diesem Zusammenhang oft sehen werden, sind switch
, case
, default
und break
.
Die allgemeine Syntax sieht so aus:
switch(expression) { case LabelA: DoSomething; break; case LabelB: DoSomethigElse; break; // and so on ... default: DoStuffWhenExpressionIsNotHandledAbove; break; }
Der Code evaluiert den gegebenen Ausdruck (expression
) und prüft diesen gegen alle gegebenen Labels. Die Case Labels müssen Konstanten sein. Falls ein Vergleich gelingt, wird der Code ausgeführt, der nach dem Label steht. Erst wird LabelA
geprüft, falls hier keine Übereinstimmung vorliegt, wird LabelB
geprüft. Falls hier ein true
vorliegt, wird DoSomethingElse
ausgeführt und dann wird das Konstrukt sofort verlassen, weil ein break
ausgeführt wird. Würde kein break
angegeben werden, würden alle weiteren Labels auch geprüft werden und das soll man vermeiden, daher ist ein break
am Ende eines Cases wichtig.
Das folgende Programm gibt aus, woher die Wochentage ihren Namen haben, mithilfe eines switch-case
Konstrukts:
// daysOfWeek.cpp #include <iostream> using namespace std; int main() { enum DaysOfWeek { Sunday = 0, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; cout << "Find what days of the week are named after!" << endl; cout << "Enter a number for a day (Sunday = 0): "; int dayInput = Sunday; // initialize to Sunday cin >> dayInput; switch(dayInput) { case Sunday: cout << "Sunday was named after the Sun" << endl; break; case Monday: cout << "Monday was named after the moon" << endl; break; case Tuesday: cout << "Tuesday was named after Mars " << endl; break; case Wednesday: cout << "Wednesday was named after Mercury" << endl; break; case Thursday: cout << "Thursday was named after Jupiter" << endl; break; case Friday: cout << "Friday was named after Venus" << endl; break; case Saturday: cout << "Saturday was named after Saturn" << endl; break; default: cout << "Wrong input, execute again" << endl; break; } return 0; }
Der ? ... :
Bedingungsoperator ist quasi eine Kurzform des if ... else
Konstrukts
Es gibt noch einen Operator, der eine Kurzform des if ... else
Konstrukts darstellt. Der Bedingungsoperator ? ... :
ist ein ternärer Operator, weil er drei Operatoren benötigt.
(conditional expression evaluated to a bool) ? expression1 if true : expression2 if false;
Dieser Operator könnte z.B. genutzt werden, um einen kompakten Vergleich zweier Zahlen durchzuführen und zu schauen, welche der beiden die größere ist.
int max = (num1 > num2) ? num1 : num2;
Hier wird geschaut, ob num1
größer ist als num2
. Falls ja (true
), dann wird max = num1
und falls nicht (false
), dann wird max = num2
.
// findTheMax.cpp #include <iostream> using namespace std; int main() { cout << "Enter two numbers" << endl; int num1 = 0; int num2 = 0; cin >> num1; cin >> num2; int max = (num1 > num2) ? num1 : num2; cout << "The greater of " << num1 << " and " << num2 << " is " << max << endl; return 0; }
Ok, damit haben wir die Bedingungen durch. Das war heute ein recht kurzer Beitrag … das nächste mal kümmern wir uns dann um Schleifen😮 …
Schreibe einen Kommentar