A switch-case is used for flow control when you are testing the same variable for equality.
switch (expression) { <declarations> case constant: statements break; case constant: statements break; default: statements break; }
The term ‘expression’ above refers to a variable under test. From the diagram below, it is the selector that is used to determine the flow of code within the switch-case statement.
Consider the following example:
int iResponse; puts("Please select:"); puts("0 - Sales"); puts("1 - Opening hours"); puts("2 - Repairs"); puts("3 - Complaints"); puts("4 - Anything else"); scanf("%d", &iResponse); if (iResponse == 0) { puts("Please wait for a sales advisor"); playAnnoyingMusic(5); redirect(123); } else if (iResponse == 1) { puts("We are open 24Hrs 7 days a week"); redirect(0); } else if (iResponse == 2) { puts("Please wait while we redirect you"); playAnnoyingMusic(25); redirect(124); } else if ((iResponse == 3) || (iResponse == 4)) { puts("Please wait while we redirect you"); playAnnoyingMusic(60); redirect(0); //very cynical } else { puts("Returning to main menu"); playAnnoyingMusic(5); redirect(0); //very cynical };
Note how it is the same variable being tested each time. The equivalent code with a switch-case is as follows:
int iResponse; puts("Please select:"); puts("0 - Sales"); puts("1 - Opening hours"); puts("2 - Repairs"); puts("3 - Complaints"); puts("4 - Anything else"); scanf("%d", &iResponse); switch (iResponse) { case 0: puts("Please wait for a sales advisor"); playAnnoyingMusic(5); redirect(123); break; case 1: puts("We are open 24Hrs 7 days a week"); redirect(0); break; case 2: puts("Please wait while we redirect you"); playAnnoyingMusic(25); redirect(124); break; case 3: case 4: puts("Please wait while we redirect you"); playAnnoyingMusic(60); redirect(0); //very cynical break; default: puts("Returning to main menu"); playAnnoyingMusic(5); redirect(0); //very cynical break; };
Notes:
- Each evaluation must be exclusive
- Use break to avoid falling through into the next case (common error)
- Multiple conditions can be handled by writing separate case statements without a break.
- default (optional) is the catch-all if none are matched