C - Switch with multiple case numbers

user2649696 picture user2649696 · Nov 26, 2013 · Viewed 97.3k times · Source

So my professor asked us to create a switch statement. We are allowed to use only the "SWITCH" statement to do the program. He wants us to input a number and then display it if it is on the number range and what briefcase number will be taken as shown below. Now... I know that for this type of program it is easier to use the IF statement. Doing Case 1: Case 2: Case 3...Case 30 will work but will take too much time due to the number range.

#include <stdio.h>
main()
{
      int x;
      char ch1;
      printf("Enter a number: ");
      scanf("%d",&x);
      switch(x)
      {
                 case 1://for the first case #1-30
                 case 30:
                      printf("The number you entered is >= 1 and <= 30");
                      printf("\nTake Briefcase Number 1");
                      break;         
                 case 31://for the second case #31-59
                 case 59:
                      printf("The number you entered is >= 31 and <= 59");
                      printf("\nTake Briefcase Number 2");
                      break;                 
                 case 60://for the third case #60-89
                 case 89:
                      printf("The number you entered is >= 60 and <= 89");
                      printf("\nTake Briefcase Number 3");
                      break;                 
                 case 90://for the fourth case #90-100
                 case 100:
                      printf("The number you entered is >= 90 and <= 100");
                      printf("\nTake Briefcase Number 4");
                      break;      
                 default:
                     printf("Not in the number range");
                     break;

                 }
      getch();
      }

My professor told us that there is a shorter way on how to do this but won't tell us how. The only way I can think of shortening it is by using IF but we are not allowed to. Any Ideas on how I can make this work out?

Answer

tay10r picture tay10r · Nov 26, 2013

With GCC and Clang, you can use case ranges, like this:

switch (x){

case 1 ... 30:
    printf ("The number you entered is >= 1 and <= 30\n");
    break;
}

The only cross-compiler solution is to use case statements like this:

switch (x){

case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
    printf ("The number you entered is >= 1 and <= 6\n");
    break;
}

Edit: Using something to the effect of switch (x / 10) is another good way of doing this. It may be simpler to use GCC case ranges when the ranges aren't differences of 10, but on the other hand your professor might not take a GCC extension as an answer.