Ugrás a tartalomhoz

Szerkesztő:LinguisticMystic/cpp/Switch

A Wikiszótárból, a nyitott szótárból

🔁 Revisiting Conditional Logic: If-Else Chains

[szerkesztés]

When you need to handle different branches of logic based on a variable’s value, you may have used multiple if-else statements. For example:

if (choice == 1) { ... }
else if (choice == 2) { ... }
else if (choice == 3) { ... }
...

This works fine for a small number of options, but as the number grows (e.g., 5, 10, or more), the code becomes:

  • Verbose
  • Harder to maintain
  • Less readable

That’s where the switch statement comes in.



🎮 Game Menu Example Using If-Else

[szerkesztés]

Here’s a simple menu selection using if-else:

#include <iostream>

int main() {
    int choice;
    std::cout << "Game Menu\n";
    std::cout << "1. New Game\n";
    std::cout << "2. Continue Game\n";
    std::cout << "3. Settings\n";
    std::cout << "4. Quit\n";
    std::cout << "Choose an option: ";
    std::cin >> choice;

    if (choice == 1) {
        std::cout << "Starting a new game...\n";
    } else if (choice == 2) {
        std::cout << "Continuing the game...\n";
    } else if (choice == 3) {
        std::cout << "Opening settings...\n";
    } else if (choice == 4) {
        std::cout << "Exiting the game...\n";
    } else {
        std::cout << "Invalid choice. Please try again.\n";
    }

    return 0;
}

❗ Drawback

[szerkesztés]

Even though this works, more options mean more else if statements, increasing complexity and reducing clarity.



✅ Enter the switch Statement

[szerkesztés]

The switch statement lets you evaluate a single variable and execute different blocks of code based on its value.

✔️ Syntax Breakdown

[szerkesztés]
switch (variable) {
    case constant1:
        // Code to execute if variable == constant1
        break;
    case constant2:
        // Code to execute if variable == constant2
        break;
    ...
    default:
        // Code to execute if no case matches
        break;
}

✅ Game Menu Using switch

[szerkesztés]

Here’s the same game menu example using switch:

#include <iostream>

int main() {
    int choice;
    std::cout << "Game Menu\n";
    std::cout << "1. New Game\n";
    std::cout << "2. Continue Game\n";
    std::cout << "3. Settings\n";
    std::cout << "4. Quit\n";
    std::cout << "Choose an option: ";
    std::cin >> choice;

    switch (choice) {
        case 1:
            std::cout << "Starting a new game..." << std::endl;
            break;
        case 2:
            std::cout << "Continuing the game..." << std::endl;
            break;
        case 3:
            std::cout << "Opening settings..." << std::endl;
            break;
        case 4:
            std::cout << "Exiting the game..." << std::endl;
            break;
        default:
            std::cout << "Invalid choice. Please try again.\n";
            break;
    }

    return 0;
}

✅ Why It’s Better:

[szerkesztés]
  • Much cleaner.
  • Easier to read and extend.
  • Less chance for mistake due to missing else.



🧪 Under the Microscope: Key Components

[szerkesztés]
Keyword Description
switch Evaluates a single variable (must be integral, char, or enum)
case Represents a specific value to compare against
break Terminates execution of the current case block
default Optional; executes if no case matches



⚠️ What Happens Without break?

[szerkesztés]

Let’s look at a fall-through example:

#include <iostream>

int main() {
    int option = 2;

    switch (option) {
        case 1:
            std::cout << "This won't print.\n";
        case 2:
            std::cout << "Oh we'll print it.\n";
        case 3:
            std::cout << "And this too...\n";
        case 4:
            std::cout << "And this?\n";
        default:
            std::cout << "Default case also prints!\n";
    }

    return 0;
}

🔍 Output:

[szerkesztés]
Oh we'll print it.
And this too...
And this?
Default case also prints!

Why? Because there’s no break after each case, so it falls through into the next.



🧠 Moral of the Story

[szerkesztés]
  • Always include break; after each case unless you intentionally want a fall-through (which is rare).
  • switch statements are ideal for discrete choices, not for range-based comparisons (like x > 10).



✅ Summary

[szerkesztés]
Feature If-Else Switch
Complexity Grows quickly Flat and readable
Data types Any valid condition Only integral or enum types
Fall-through Not applicable Must handle using break
Use case Range & complex logic Discrete fixed choices



✅ Tip:

[szerkesztés]

If you ever forget to include break, your program may behave unexpectedly. Always test and review your switch cases carefully!