web-dev-qa-db-fra.com

C - Commutateur avec plusieurs numéros de cas

Mon professeur nous a donc demandé de créer une déclaration de changement. Nous sommes autorisés à utiliser niquement l'instruction "SWITCH" pour exécuter le programme. Il veut que nous entrions un nombre, puis l'afficher s'il est sur la plage de numéros et quel numéro de porte-documents sera pris comme indiqué ci-dessous. Maintenant ... Je sais que pour ce type de programme, il est plus facile d'utiliser la instruction IF. Faire le cas 1: le cas 2: le cas 3 ... Le cas 30 fonctionnera mais prendra trop de temps en raison de la plage de numéros.

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

Mon professeur nous a dit qu'il y avait un moyen plus court de procéder, mais il ne nous dira pas comment. La seule façon de penser à le raccourcir est d'utiliser IF mais nous n'y sommes pas autorisés. Des idées sur la façon dont je peux faire fonctionner cela?

14
user2649696

Avec GCC et CLang, vous pouvez utiliser des plages de cas, comme ceci:

switch (x){

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

La seule solution de compilation croisée consiste à utiliser des instructions de cas comme celle-ci:

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: Utiliser quelque chose à l'effet de switch (x / 10) est un autre bon moyen de le faire. Il peut être plus simple d'utiliser des plages de cas GCC lorsque les plages ne sont pas des différences de 10, Mais d'un autre côté, votre professeur peut ne pas prendre une extension GCC comme réponse.

37
tay10r

Si les plages sont cohérentes, vous pouvez jeter certaines des données:

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

   // etc ...
}

Sinon, vous devrez faire un peu de piratage sur les bords.

9
woolstar
   Try this ...

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