If you are bored with if-then-else, just switch

In C, the switch statement is used to perform different actions based on the value of an expression. It provides a convenient way to handle multiple conditions in a concise and readable manner. Here's a detailed explanation with a code sample:

#include <stdio.h>

int main() {
    // Declare a variable
    int choice;

    // Prompt user for input
    printf("Enter a number (1-3): ");
    scanf("%d", &choice);

    // Switch statement
    switch (choice) {
        // Case 1
        case 1:
            printf("You selected option 1.\n");
            // Additional statements for case 1
            break; // The 'break' statement is important to exit the switch block

        // Case 2
        case 2:
            printf("You selected option 2.\n");
            // Additional statements for case 2
            break;

        // Case 3
        case 3:
            printf("You selected option 3.\n");
            // Additional statements for case 3
            break;

        // Default case (optional)
        default:
            printf("Invalid choice.\n");
            // Additional statements for the default case
            break;
    }

    return 0;
}

Explanation:

  1. Declaration and Input: First, we declare an integer variable choice to store the user's input. We then prompt the user to enter a number (1-3) and store it in the choice variable using scanf.

  2. Switch Statement: The switch statement is used to evaluate the value of the choice variable. The value inside the parentheses of switch is the expression that is being tested.

  3. Cases: Each case represents a possible value of the expression. In this example, we have cases for 1, 2, and 3. If the value of choice matches any of these cases, the corresponding block of code is executed.

  4. Break Statement: After each case block, a break statement is used to exit the switch statement. This is important because it prevents the code from falling through to the next case. Without break, all the subsequent cases would be executed until a break is encountered.

  5. Default Case (Optional): The default case is optional and is executed if none of the cases match the value of the expression. It is like an "else" statement in an if-else structure.

The switch statement provides a clean and efficient way to handle multiple conditions based on the value of an expression. Each case block contains the code to be executed for a specific value, and the break statement ensures that only the relevant block is executed.

If you omit the break statement in a switch case, a phenomenon known as "fall-through" occurs. Fall-through means that control will "fall through" to the next case, and subsequent case blocks will be executed until a break statement is encountered or until the end of the switch statement. Here's an example with an explanation:

#include <stdio.h>

int main() {
    int choice;

    printf("Enter a number (1-3): ");
    scanf("%d", &choice);

    switch (choice) {
        case 1:
            printf("You selected option 1.\n");
            // No break here, so it falls through to the next case

        case 2:
            printf("You selected option 2.\n");
            // No break here, so it falls through to the next case

        case 3:
            printf("You selected option 3.\n");
            // No break here, so it continues to execute the next case

        default:
            printf("This is the default case.\n");
            break;
    }

    return 0;
}

Explanation:

  1. User Input and Switch Statement: The program prompts the user for input and uses a switch statement to evaluate the value of choice.

  2. Fall-Through: In each case block, there is no break statement. As a result, if the user enters, for example, 1, the program will print "You selected option 1." and then continue to execute the code in the next case without checking its condition.

  3. Output: If the user enters 1, the output will be:

     You selected option 1.
     You selected option 2.
     You selected option 3.
     This is the default case.
    
  4. Default Case: The default case is executed because control falls through from the previous cases. If there were a break after each case, only the relevant block of code would be executed.

Using fall-through can be intentional in some cases when you want multiple cases to share the same code. However, it's important to use it judiciously and document it well, as it can make the code less readable and may lead to unexpected behavior if not handled carefully.

Cases can be combined in a switch statement by intentionally omitting the break statement between cases. This allows multiple cases to share the same block of code. Here's an example with a detailed explanation:

#include <stdio.h>

int main() {
    int choice;

    printf("Enter a number (1-3): ");
    scanf("%d", &choice);

    switch (choice) {
        // Combining cases 1 and 2
        case 1:
        case 2:
            printf("You selected option 1 or 2.\n");
            // No break, so it falls through to the next case

        case 3:
            printf("You selected option 3.\n");
            // No break here, so it continues to execute the next case

        default:
            printf("This is the default case.\n");
            break;
    }

    return 0;
}

Explanation:

  1. User Input and Switch Statement: The program prompts the user for input and uses a switch statement to evaluate the value of choice.

  2. Combining Cases 1 and 2: In this example, cases 1 and 2 are intentionally combined by omitting the break statement after case 1. If the user enters either 1 or 2, the program will execute the code for both cases.

  3. Fall-Through: Since there is no break after case 2, control falls through to the code for case 3.

  4. Output: If the user enters 1, the output will be:

     You selected option 1 or 2.
     You selected option 3.
     This is the default case.
    
  5. Default Case: The default case is executed if none of the specific cases match. The break statement at the end ensures that the switch statement is exited.

Combining cases can be useful when you want multiple cases to share the same code. However, it should be done intentionally and documented to make the code more readable and understandable. It's crucial to be aware of the fall-through behavior and use it only when it serves a specific purpose in your code.

The switch statement is designed to work with integral types, such as integers (int), characters (char), and enumerated types. The expression within the switch statement must evaluate to an integral value.

The following data types are generally allowed in a switch statement:

  1. int and its variations (short int, long int, etc.):

     int number;
     switch (number) {
         // cases...
     }
    
  2. char and its variations:

     char letter;
     switch (letter) {
         // cases...
     }
    
  3. Enumeration types (enum):

     enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY };
     enum Day today;
     switch (today) {
         // cases...
     }
    

It's important to note that the switch statement doesn't work with floating-point types, strings, or other non-integral types. If you need to perform a multi-way branch based on non-integral values, you would typically use a series of if-else statements or other control flow constructs.