DevAcademia
C++C#CPythonJava
  • C Basics

  • Introduction to C
  • Getting Started with C
  • C Syntax
  • C Output
  • C Comments
  • C Variables
  • C Data Types
  • C Constants
  • C Operators
  • C Booleans
  • C If...Else Statements
  • C Switch Statement
  • C While Loops
  • C For Loops
  • C Break and Continue
  • C Strings
  • C User Input
  • C Memory Address
  • C Pointers
  • C Files
  • C Functions

  • C Functions
  • C Function Parameters
  • C Scope
  • C Function Declaration
  • C Recursion
  • C Math Functions
  • C Structures

  • C Structures
  • C Structs & Pointers
  • C Unions
  • C Enums

  • C Enums
  • C Memory

  • C Allocate Memory
  • C Access Memory
  • C Reallocate Memory
  • C Deallocate Memory
  • C Structs and Memory
  • C Memory Example
  • C Quiz

  • C Quiz
  • C Basics

  • Introduction to C
  • Getting Started with C
  • C Syntax
  • C Output
  • C Comments
  • C Variables
  • C Data Types
  • C Constants
  • C Operators
  • C Booleans
  • C If...Else Statements
  • C Switch Statement
  • C While Loops
  • C For Loops
  • C Break and Continue
  • C Strings
  • C User Input
  • C Memory Address
  • C Pointers
  • C Files
  • C Functions

  • C Functions
  • C Function Parameters
  • C Scope
  • C Function Declaration
  • C Recursion
  • C Math Functions
  • C Structures

  • C Structures
  • C Structs & Pointers
  • C Unions
  • C Enums

  • C Enums
  • C Memory

  • C Allocate Memory
  • C Access Memory
  • C Reallocate Memory
  • C Deallocate Memory
  • C Structs and Memory
  • C Memory Example
  • C Quiz

  • C Quiz

Loading C tutorial…

Loading content
C BasicsTopic 30 of 64
←PreviousPrevNextNext→

C Switch Statement

Introduction to Switch Statement

The switch statement in C is a multi-way branch statement that allows a variable to be tested for equality against a list of values. Each value is called a case, and the variable being switched on is checked for each case.

Switch statements provide a cleaner and more efficient alternative to long if-else-if ladders when you need to compare the same variable against multiple constant values.

Syntax and Structure

The basic syntax of a switch statement is:

switch (expression) {

case constant1:

// code to be executed if expression equals constant1;

break;

case constant2:

// code to be executed if expression equals constant2;

break;

default:

// code to be executed if expression doesn't match any case;

}

The expression must be of an integer or character type, and case constants must be integer or character constants.

How Switch Statement Works

1. The expression in the switch statement is evaluated once

2. The value of the expression is compared with the values of each case

3. If there's a match, the code associated with that case is executed

4. The break statement terminates the switch statement and transfers control to the next line after the switch

5. If no case matches and a default case is present, its code is executed

6. If no case matches and no default case is present, no code in the switch is executed

Basic Example

Example
#include <stdio.h>

int main() {
    int day = 4;
    
    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
Thursday

The Importance of Break Statements

The break statement is crucial in switch statements. Without it, execution will 'fall through' to the next case, which can lead to unexpected behavior.

This fall-through behavior is sometimes intentionally used when multiple cases should execute the same code.

Example
#include <stdio.h>

int main() {
    int number = 2;
    
    printf("Without break statements:\n");
    switch (number) {
        case 1:
            printf("One\n");
        case 2:
            printf("Two\n");
        case 3:
            printf("Three\n");
        default:
            printf("Other\n");
    }
    
    printf("\nWith break statements:\n");
    switch (number) {
        case 1:
            printf("One\n");
            break;
        case 2:
            printf("Two\n");
            break;
        case 3:
            printf("Three\n");
            break;
        default:
            printf("Other\n");
    }
    
    return 0;
}
Output
Without break statements:
Two
Three
Other

With break statements:
Two

Intentional Fall-Through

Sometimes, intentional fall-through is desired when multiple cases should execute the same code. This can make code more concise and readable.

Example
#include <stdio.h>

int main() {
    char grade = 'B';
    
    switch (grade) {
        case 'A':
        case 'a':
            printf("Excellent!\n");
            break;
        case 'B':
        case 'b':
            printf("Good!\n");
            break;
        case 'C':
        case 'c':
            printf("Average\n");
            break;
        case 'D':
        case 'd':
            printf("Below Average\n");
            break;
        case 'F':
        case 'f':
            printf("Fail\n");
            break;
        default:
            printf("Invalid grade\n");
    }
    
    return 0;
}
Output
Good!

Nested Switch Statements

Switch statements can be nested within other switch statements, though this should be used judiciously as it can make code more complex.

Example
#include <stdio.h>

int main() {
    int i = 1;
    int j = 2;
    
    switch (i) {
        case 1:
            printf("Outer case 1\n");
            switch (j) {
                case 1:
                    printf("Inner case 1\n");
                    break;
                case 2:
                    printf("Inner case 2\n");
                    break;
            }
            break;
        case 2:
            printf("Outer case 2\n");
            break;
    }
    
    return 0;
}
Output
Outer case 1
Inner case 2

Switch vs If-Else If

Switch statements are generally more efficient than long if-else-if chains when:

• You're comparing the same variable against multiple constant values

• The values are integers or characters

• The number of cases is relatively large

If-else-if statements are better when:

• You need to check ranges of values

• You need to evaluate complex conditions

• You're comparing different variables

Limitations of Switch Statement

1. The expression must be of integer or character type (no floats, strings, or other types)

2. Case values must be constant expressions (no variables)

3. Case values must be unique within the same switch statement

4. Cannot check for ranges directly (though you can use fall-through for this)

Best Practices

1. Always include a default case to handle unexpected values

2. Use break statements unless you intentionally want fall-through behavior

3. Comment intentional fall-through to make it clear it's not a mistake

4. Keep switch statements reasonably short - consider refactoring very long ones

5. Use enumerations instead of magic numbers for case values when possible

6. Consider using functions for complex case logic to keep the switch readable

Real-World Example: Calculator

Switch statements are commonly used in calculator programs to determine which operation to perform based on user input.

Example
#include <stdio.h>

int main() {
    char operator;
    double num1, num2, result;
    
    printf("Enter an operator (+, -, *, /): ");
    scanf(" %c", &operator);
    
    printf("Enter two numbers: ");
    scanf("%lf %lf", &num1, &num2);
    
    switch (operator) {
        case '+':
            result = num1 + num2;
            break;
        case '-':
            result = num1 - num2;
            break;
        case '*':
            result = num1 * num2;
            break;
        case '/':
            if (num2 != 0) {
                result = num1 / num2;
            } else {
                printf("Error: Division by zero!\n");
                return 1;
            }
            break;
        default:
            printf("Error: Invalid operator!\n");
            return 1;
    }
    
    printf("Result: %.2lf %c %.2lf = %.2lf\n", num1, operator, num2, result);
    return 0;
}
Output
Enter an operator (+, -, *, /): *
Enter two numbers: 5 7
Result: 5.00 * 7.00 = 35.00
Test your knowledge: C Switch Statement
Quiz Configuration
8 of 8 questions
Sequential
Previous allowed
Review enabled
Early close allowed
Estimated time: 10 min
C BasicsTopic 30 of 64
←PreviousPrevNextNext→