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