C - переключатель с несколькими номерами корпусов

Итак, мой профессор попросил нас создать оператор switch. Нам разрешено использовать только оператор "SWITCH" для выполнения этой программы. Он хочет, чтобы мы вводили номер, а затем отображали его, если он находится в диапазоне номеров, и какой номер портфеля будет сделан, как показано ниже. Теперь... Я знаю, что для этого типа программы проще использовать оператор IF. Выполнение дела 1: Случай 2: Случай 3... Дело 30 будет работать, но займет слишком много времени из-за диапазона номеров.

#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();
      }

Мой профессор сказал нам, что есть более короткий путь, как это сделать, но не расскажет нам, как это сделать. Единственный способ, которым я могу думать об этом, - это использовать IF, но нам не разрешают. Любые идеи о том, как я могу это сделать?

Ответ 1

С помощью GCC и CLang вы можете использовать диапазоны регистров, например:

switch (x){

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

Единственное решение кросс-компилятора - использовать аргументы case, подобные этому:

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;
}

Изменить: Использование чего-то в действии switch (x / 10) - еще один хороший способ сделать это. Может быть проще использовать диапазоны регистров GCC, если диапазоны не отличаются от 10, но, с другой стороны, ваш профессор может не использовать расширение GCC в качестве ответа.

Ответ 2

Если диапазоны согласованы, вы можете выбросить некоторые данные:

switch (x / 10 )
{
   case 0:
   case 1:
   case 2:  // x is 0 - 29
     break ;

   // etc ...
}

В противном случае вам придется немного поработать над краями.

Ответ 3

   Try this ...

#include <stdio.h>
#include <stdio.h>
main()
{
      int x;
      char ch1;
      printf("Enter a number: ");
      scanf("%d",&x);
      int y=ceil(x/30.0);
      switch(y)
      {

                 case 1:
                      printf("The number you entered is >= 1 and <= 30");
                      printf("\nTake Briefcase Number 1");
                      break;         

                 case 2:
                      printf("The number you entered is >= 31 and <= 60");
                      printf("\nTake Briefcase Number 2");
                      break;                 

                 case 3:
                      printf("The number you entered is >= 61 and <= 90");
                      printf("\nTake Briefcase Number 3");
                      break;                 

                 case 4:
                      printf("The number you entered is >= 91 and <= 100");
                      printf("\nTake Briefcase Number 4");
                      break;      
                 default:
                     printf("Not in the number range");
                     break;

                 }
      getch();
      }