Learning pathOriginal reference
Lesson 5 of 12

Optional: other ways to choose

Recognize switch for exact choices and the conditional operator for choosing a value.

Switch selects an exact case

This is a second-reading topic: every core exercise can use if and else. A switch is useful when an integer or character is compared with fixed values. A matching case is where execution starts; break exits the switch.

Without an appropriate break, execution can continue into later cases. This is fallthrough. default handles unmatched values. Use an if chain for intervals or compound conditions; switch does not directly select on std::string or double.

C++23
#include <iostream>

int main() {
    char choice = ' ';
    std::cin >> choice;
    switch (choice) {
        case 'A':
            std::cout << "Add\n";
            break;
        case 'S':
            std::cout << "Subtract\n";
            break;
        default:
            std::cout << "Unknown\n";
    }
    return 0;
}

An expression can choose a value

The conditional expression condition ? valueIfTrue : valueIfFalse produces one value. For integers a and b, int larger = (a > b) ? a : b chooses the larger.

An ordinary if/else with two assignments expresses the same decision. Use whichever is easier to explain; deeply nested conditional operators hide the structure. Do not paste both alternative declarations of larger into the same scope.

Pause & predict

Why does the A case use break after printing Add?

Choose an answer
Try it yourself

Turn the idea into code

Read a, an operator, and b, in that order. Support +, -, *, and integer /. Assume |a|, |b| ≤ 10⁶. Print ERROR for division by zero.

Give me a hint

Use a char for the operator and long long for arithmetic. Guard the division within its branch.

Show the explained solution

Each case computes one operation and breaks. The divisor check is only needed for division. The task guarantees one of the four operators.

C++23
#include <iostream>

int main() {
    long long a = 0, b = 0;
    char operation = ' ';
    std::cin >> a >> operation >> b;
    switch (operation) {
        case '+': std::cout << a + b << '\n'; break;
        case '-': std::cout << a - b << '\n'; break;
        case '*': std::cout << a * b << '\n'; break;
        case '/':
            if (b == 0) { std::cout << "ERROR\n"; }
            else { std::cout << a / b << '\n'; }
            break;
    }
    return 0;
}

Your notes

Ready for the next idea?

Mark complete when you can explain it yourself.

From a problem to a programIdentify the input, output, and constraints, then translate a small plan into C++.Variables, types, and remembered valuesChoose a representation, initialize it, and understand what assignment really changes.Arithmetic without surprisesPredict division and remainder, widen before multiplication, and format decimal answers.Conditions and logical decisionsBuild exclusive categories, combine comparisons, and protect operations with short-circuit logic.Optional: other ways to chooseRecognize switch for exact choices and the conditional operator for choosing a value.For loops: make repetition preciseTrace initialization, condition, body, and update—and avoid an extra iteration.While, do-while, and stopping rulesChoose a loop from its stopping condition and read the exact input format.Break, continue, and early answersDistinguish leaving a loop from skipping one iteration, without losing required input.Five patterns worth understandingUse sums, counts, best-so-far candidates, products, and flags to process a stream.Nested loops: rows and columnsTranslate a shape into two loop roles and count the total work.Take a number apart, one digit at a timeUse remainder and division to process decimal digits, including zero.Multiple cases and a debugging mindsetCombine the patterns, isolate each case, and test the boundaries that can break your idea.Arrays: give every value a placeUnderstand indices, initialization, capacity, active length, and the first safe array loop.Scan, count, search, and compareDistinguish values from positions and preserve the exact tie rule a problem asks for.Change a sequence without losing itUpdate, copy, compare, reverse, and inspect neighbours using the correct bounds.Matrices: think in two coordinatesTraverse tables, total rows and columns, inspect diagonals, and protect grid neighbours.Characters become stringsSeparate characters from numbers, then safely inspect and edit managed text.Read the text the problem actually givesChoose words or full lines, preserve empty cases, and reset only the state that needs it.Scan text: count, filter, transformBuild a result from matching characters without losing leading zeros or skipping shifted text.Join, compare, and find textLearn content comparison, lexicographical order, substring counts, and the not-found sentinel.