The switch Condition

switch case
A switch-case structure performs a complex decision in your code, similar to a cascade of if else-if else statements. The structure works like a comparison as a whole, acting upon single values or variables. But its construction need not lack expressions.

In my books, I describe the switch statement like this:

Unlike an if statement, switch eats only a single value.

And I describe case like this:

A case statement shows a single value . . . followed by a colon.

It’s true that switch and case operate on single values, either a variable, constant, or literal value. But they can also work with expressions. The key is that the expression must result in a single value, as this code demonstrates:

2020_08_08-Lesson-a

#include <stdio.h>

int main()
{
    switch( 4-2 )
    {
        case 4:
            puts("The answer is 4");
            break;
        case 3:
            puts("The answer is 3");
            break;
        case 2:
            puts("The answer is 2");
            break;
        case 1:
            puts("The answer is 1");
            break;
        case 0:
            puts("The answer is 0");
            break;
        default:
            puts("I don't know!");
    }

    return(0);
}

At Line 5, the switch keyword’s parentheses feature an expression, ( 4-3 ). It’s not a comparison; the comparison happens between the result of the switch expression and what follows the case keywords in the structure. The results of the expression is 2 and the case 2: statement’s (starting at Line 13) are executed.

As with switch, the case keywords can also sport an expression, providing it returns a single value:

2020_08_08-Lesson-b

#include <stdio.h>

int main()
{
    switch( 4-2 )
    {
        case (4-0):
            puts("The answer is 4");
            break;
        case (4-1):
            puts("The answer is 3");
            break;
        case (4-2):
            puts("The answer is 2");
            break;
        case (4-3):
            puts("The answer is 1");
            break;
        case (4-4):
            puts("The answer is 0");
            break;
        default:
            puts("I don't know!");
    }

    return(0);
}

Of course, this example is pedantic; obviously 4-2 matches 4-2. Still, it’s the result that’s compared, not the literal expression.

What happens when you use a comparison in a switch statement? Oo! Let’s find out:

2020_08_08-Lesson-c

#include <stdio.h>

int main()
{
    int a,b;

    a = 10;
    b = -10;

    switch( a > b  )
    {
        case 1:
            printf("%d is greater than %d\n",a,b);
            break;
        case 0:
            printf("%d is not greater than %d\n",a,b);
            break;
        default:
            puts("I'm not sure what's going on");
    }

    return(0);
}

This code compiles with a warning. The switch statement’s expression at Line 10 is a “boolean.” Still, this warning doesn’t stop the program from being built. Here’s the output:

10 is greater than -10

You can suppress the warning by casting the switch statement like this:

switch( (int)(a > b) )

Still it’s easier to use an if statement instead. After all, it’s the right tool for the job.

Leave a Reply