C Switch


In C programming, the switch statement is a control structure used to execute one block of code among multiple alternatives based on the value of a variable or expression. While if...else statements are more general-purpose, a switch statement is particularly efficient and readable when you have a variable that can take a discrete set of values. This structure is commonly used for menus, grading systems, days of the week, or any scenario where multiple distinct outcomes are possible.

The switch statement is valuable because it allows you to write code that is organized and easy to understand, especially compared to long chains of if...else if statements, which can quickly become messy.

What is Switch Statement?

A switch statement evaluates an expression and then matches its value against a set of cases. When a match is found, the corresponding block of code executes. If no match is found, the optional default block executes.

Syntax:

switch(expression) {
    case value1:
        // Code to execute if expression == value1
        break;
    case value2:
        // Code to execute if expression == value2
        break;
    ...
    default:
        // Code to execute if no case matches
}
  • expression: The value to evaluate. It is usually an integer, character, or enumeration.

  • case: Represents a possible value for the expression.

  • break: Exits the switch statement after a case executes. Without break, the program continues to execute the following cases.

  • default: Executes if no other case matches. It is similar to the else statement in if...else blocks and is optional but recommended.

Example: Days of the Week

#include <stdio.h>

int main() {
    int day = 3;

    switch(day) {
        case 1:
            printf("Monday\n");
            break;
        case 2:
            printf("Tuesday\n");
            break;
        case 3:
            printf("Wednesday\n");
            break;
        case 4:
            printf("Thursday\n");
            break;
        case 5:
            printf("Friday\n");
            break;
        case 6:
            printf("Saturday\n");
            break;
        case 7:
            printf("Sunday\n");
            break;
        default:
            printf("Invalid day\n");
    }

    return 0;
}

Output:

Wednesday

In this example, the value of day matches case 3, so the program prints "Wednesday". The break statement ensures the program does not continue executing subsequent cases.

Grouping Cases

Sometimes, multiple cases should execute the same code. You can group them together:

int grade = 'B';

switch(grade) {
    case 'A':
    case 'B':
        printf("Excellent or Good\n");
        break;
    case 'C':
        printf("Average\n");
        break;
    default:
        printf("Invalid grade\n");
}

Here, both 'A' and 'B' result in the same output. Grouping reduces redundancy and makes the code cleaner.

Fall-Through Behavior

If you omit the break statement, the program continues executing subsequent cases until it encounters a break or reaches the end of the switch. This is called fall-through:

int num = 2;

switch(num) {
    case 1:
        printf("One\n");
    case 2:
        printf("Two\n");
    case 3:
        printf("Three\n");
    default:
        printf("Default\n");
}

Output:

Two
Three
Default
  • Fall-through can be intentional in certain situations but can also cause unexpected results if you forget break. Always comment intentional fall-through cases to avoid confusion.

Switch with Characters

Switch statements work well with characters, as characters are stored as integer ASCII values. For example:

char choice = 'Y';

switch(choice) {
    case 'Y':
        printf("You selected Yes\n");
        break;
    case 'N':
        printf("You selected No\n");
        break;
    default:
        printf("Invalid choice\n");
}

Output:

You selected Yes

This demonstrates how switch statements are flexible enough to handle different types of discrete values.

Nested Switch Statements

You can even nest switch statements to handle more complex scenarios:

#include <stdio.h>

int main() {
    int category = 1;
    int item = 2;

    switch(category) {
        case 1:
            printf("Fruits:\n");
            switch(item) {
                case 1:
                    printf("Apple\n");
                    break;
                case 2:
                    printf("Banana\n");
                    break;
                default:
                    printf("Unknown fruit\n");
            }
            break;
        case 2:
            printf("Vegetables:\n");
            break;
        default:
            printf("Invalid category\n");
    }

    return 0;
}

Output:

Fruits:
Banana

Nested switches allow you to handle multiple layers of choices clearly without deeply nesting if...else statements.

Advantages of Using Switch

  1. Readability: More organized than long if...else if chains.

  2. Efficiency: Compilers may optimize switch statements, making them faster.

  3. Clarity: Easier to see all possible cases at a glance.

  4. Reduced Errors: Grouping cases and using breaks correctly prevents unintended execution.

Best Practices

  1. Always include a default case to handle unexpected values.

  2. Use break unless you intentionally want a fall-through.

  3. Group similar cases to avoid repeated code.

  4. Comment fall-through cases for clarity.

  5. Keep the switch expression simple; avoid complex calculations inside the expression.

Practical Example: Months and Days

#include <stdio.h>

int main() {
    int month = 4;

    switch(month) {
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            printf("31 days\n");
            break;
        case 4: case 6: case 9: case 11:
            printf("30 days\n");
            break;
        case 2:
            printf("28 or 29 days\n");
            break;
        default:
            printf("Invalid month\n");
    }

    return 0;
}

Output:

30 days

This example demonstrates how grouping and the default case improve readability and maintainability.

Summary of the Tutorial

The switch statement in C is a powerful tool for decision-making when dealing with multiple discrete values. By understanding case, break, default, and the behavior of fall-through, programmers can write code that is efficient, readable, and maintainable. Switch statements are particularly useful for menus, grading systems, or any scenario where multiple outcomes are possible, helping to simplify complex conditional logic.


Practice Questions

  1. Write a program that takes a number (1–7) from the user and prints the corresponding day of the week.

  2. Create a program to take a grade character (A, B, C, D) and print the corresponding performance message.

  3. Write a program to take a month number and print the number of days in that month using a switch statement.

  4. Create a menu-driven program where the user enters a choice (1–3) and prints a corresponding message for each option.

  5. Write a program to take a vowel character from the user and print if it is a vowel or consonant using switch.

  6. Develop a program to convert a number 1–12 to the corresponding month name.

  7. Write a program that takes a traffic signal color (R, Y, G) and prints the corresponding action.

  8. Create a program to take a menu choice for a simple calculator (1=Add, 2=Subtract, 3=Multiply, 4=Divide) and perform the calculation.

  9. Write a program that prints the season (Winter, Spring, Summer, Autumn) based on a month number using switch.

  10. Develop a program to take a day number and print whether it is a weekday or weekend.


Try a Short Quiz.

coding learning websites codepractice

No quizzes available.

Go Back Top