2013-11-26 4 views
11

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

#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, но нам не разрешают. Любые идеи о том, как я могу это сделать?

+0

Просто чтобы проверить, вы уверены, что первый случай идет от 1 до 30? а не от 1 до 29? –

+3

Вы думаете, что «случай 1: случай 30:' будет соответствовать любому числу в диапазоне? Это не так. – John3136

+0

Ваша первая пара ярлыков 'case' содержит только 2 значения: 1 и 30; они игнорируют 2..29. То же самое для следующего «диапазона» и т. Д. Используя только переключатель, вы находитесь в мире боли. –

ответ

21

С GCC и Clang, вы можете использовать случай диапазоны, например:

switch (x){ 

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

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

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 в качестве ответа.

7

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

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

    // etc ... 
} 

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

+0

+1: Более или менее - '(x - 1)/10' выдаст' [012] 'за 1..30; повторение. Проблема будет -8..0 (также давая 0). –

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

Ваше текущее использование 'ceil()' немного некорректно. Вы пытаетесь сделать это на целочисленном делении 'x' на' 30', которое уже целое, потому что целочисленное деление перекрывается. Возможно, вы имели в виду 'ceil (x/30.0)'? –

+0

Внесите изменения, отредактировав мой ответ .. – uhs

+2

К сожалению, я не могу этого сделать сам, потому что редактирование составляет менее 6 символов. Если бы вы могли сделать это сами, я бы с удовольствием удалил оба этих комментария. –

Смежные вопросы