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😮 …