We use the switch statement in C to make a choice. The switch-case-default mechanism is very convenient where multiple outcomes are possible.
switch(expression) { case <integral constant 1>: statement 1; [break]; case <integral constant 2>: statement 2; [break]; .... case <integral constant n>: statement n; [break]; [default: default statement;] }
The switch tries to match an expression to a number of possible values, called cases. If no case matches, the mechanism executes the default statement.
The example is simplified for two reasons:
If you don’t understand what these mean, don’t worry, just accept that the switch works as described.
int direction = 4; switch(direction) { case 1: printf("North"); break; case 2: printf("East"); break; case 3: printf("South"); break; case 4: printf("West"); break; default: printf("Unknown direction"); }
In this example we test the variable “direction” against the four directions. If we find a match we print the corresponding direction. If no match is found the default statement executes and says “Unknown direction”.
In the example above we will print West.
char symbol; printf("Enter a symbol: "); scanf("%c", &symbol); switch(symbol) { case '-': case '+': case '*': case '/': case '=': printf("This is a symbol from the simple arithmetics."); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': printf("This is a digit."); break; default: printf("I don't know this symbol. Probably a letter..."); break; } printf("\n");
In this example we combine the cases, because we just want to point out the group where our symbol belongs. For instance, if we input *, the third case will match. Its statement is empty and it does not have a break, the execution continues with the next case ‘/’. Here we continue with the next one ‘=’ and we print the message. Then we have a break, which means that the execution of the switch statement is stopped right here. The next statement to be executed is the printf("\n"); after the closing bracket of the switch.
As we already said, all cases must have a unique value. This is not always obvious.
For example, the character type in C is represented with an integer code by the ASCII table. The code of the symbol ‘A’ is 65. So, could we have the following switch statement?
char symbol; .... switch(symbol) { case 'A': printf("A"); break; case 65: printf("65"); break; }
The answer is NO. Both values are the same for the compiler and it will mark this as a duplicate.
You can download these examples from here: switch-statement-examples.zip
enum RainbowColors {Red, Orange, Yellow, Green, Blue, Indigo, Violet}; int main() { switchEnum(Orange); return 0; } void switchEnum(enum RainbowColors color) { switch(color) { case Red: printf("Red is the first color in the rainbow."); break; case Orange: printf("Orange is the second color in the rainbow."); break; case Yellow: printf("Yellow is the third color in the rainbow."); break; case Green: printf("Green is the fourth color in the rainbow."); break; case Blue: printf("Blue is the fifth color in the rainbow."); break; case Indigo: printf("Indigo is the sixth color in the rainbow."); break; case Violet: printf("Violet is the seventh color in the rainbow."); break; default: printf("I don't know this color."); } printf("\n"); }
In conclusion, the switch statement is a very convenient tool if we want to check a variable for a set of values. It could significantly reduce the amount of code, compared to multiple if-else and depending on the compiler implementation it could also work faster.