Switch Statements: Multiple-Choice Decision Making in C++

Introduction

The switch statements stands out as a powerful tool for handling multi-choice  decision-making scenarios. In this chapter, we will embark on a detailed journey to explore the intricacies of switch statements in C++, covering their syntax, use cases, best practices, and potential pitfalls.

An Overview of Switch Statements:

The switch statements in C++ provides a concise and structured way to perform multi-choice decision making based on the value of an expression. It offers a cleaner alternatives to a series of nested if-else statements, especially when dealing with a large number of possible values.

int main() {
    int choice = 2;

    switch (choice) {
        case 1:
            // Code for case 1
            break;
        case 2:
            // Code for case 2
            break;
        // Additional cases...
        default:
            // Code for other cases
            break;
    }

    return 0;
}

Syntax Breakdown:

Switch Expression:

  • The expression inside the switch statement is evaluated once.
  • In the example, choice is the switch expression.

Case Labels:

  • Each case label represents a possible value of the switch expression.
  • The code inside the corresponding case block is executed if the switch expression matches the case label.

Break Statement:

  • The break statement terminates the switch block. Without it, execution would fall through to subsequent cases.
  • It's crucial to include break after each case unless intentional fall-through is desired.

Default Case:

  • The default case is optional and serves as a catch-all when none of the case labels matches the switch expression.
  • Like other cases, it should end with a break statement.

Use Cases and Best Practices:

Integer and Enumerated Types:

  • Switch statements are commonly used with integer and enumerated types.
  • Enumerations provide meaningful labels, enhancing code readability.
enum Color { RED, GREEN, BLUE };

Color selectedColor = GREEN;

switch (selectedColor) {
    case RED:
        // Code for red
        break;
    case GREEN:
        // Code for green
        break;
    case BLUE:
        // Code for blue
        break;
}

String-Based Switch (C++17 and later):

  • C++17 introduced the ability to use strings in a switch statement.
#include <iostream>
#include <string>

int main() {
    std::string fruit = "apple";

    switch (fruit) {
        case "apple":
            std::cout << "It's an apple." << std::endl;
            break;
        case "orange":
            std::cout << "It's an orange." << std::endl;
            break;
        default:
            std::cout << "Unknown fruit." << std::endl;
            break;
    }

    return 0;
}

Fall-Through (Avoiding Break):

Fall-through occurs when there is no break statement at the end of a case block. Instead of exiting the switch statement after executing the code for a particular case, control continues to the next case in sequence. Fall-through can be intentional and useful in certain scenarios.

For example:

#include <iostream>

int main() {
    int day = 1;

    switch (day) {
        case 1:
            std::cout << "Monday\n";
            // No break, fall-through to the next case
        case 2:
            std::cout << "Tuesday\n";
            // No break, fall-through to the next case
        case 3:
            std::cout << "Wednesday\n";
            break;  // This break statement is used to exit the switch statement
        case 4:
            std::cout << "Thursday\n";
            break;
        default:
            std::cout << "Unknown day\n";
    }

    return 0;
}

// Output
Monday
Tuesday
Wednesday

Since there is no break after a case, as is the case for case 1 and case 2, control falls through to the next case. Therefore, if day is 1 or 2, the program prin

  • Sometimes, intentional fall-through is useful when multiple cases should execute the same code.
int day = 3;

switch (day) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        std::cout << "It's a weekday." << std::endl;
        break;
    case 6:
    case 7:
        std::cout << "It's the weekend." << std::endl;
        break;
}