2013-11-26 4 views
11

Also hat mich mein Professor gebeten, eine switch-Anweisung zu erstellen. Wir dürfen nur die "SWITCH" Anweisung verwenden, um das Programm zu machen. Er möchte, dass wir eine Nummer eingeben und sie dann anzeigen, wenn sie sich auf dem Nummernkreis befindet und welche Aktenkoffernummer wie unten gezeigt genommen wird. Jetzt ... Ich weiß, dass es für diese Art von Programm einfacher ist, die IF-Anweisung zu verwenden. Fall 1: Fall 2: Fall 3 ... Fall 30 funktioniert, wird aber wegen des Nummernbereichs zu lange dauern.C - Switch mit mehreren Fallnummern

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

Mein Professor sagte uns, dass es einen kürzeren Weg gibt, wie man das macht, aber uns nicht sagen wird, wie. Der einzige Weg, wie ich es verkürzen kann, ist IF zu benutzen, aber wir dürfen es nicht. Irgendwelche Ideen, wie ich das schaffen kann?

+0

Nur um zu überprüfen, sind Sie sicher, dass der erste Fall von 1 bis 30 geht? und nicht 1 bis 29? –

+3

Denken Sie, 'Fall 1: Fall 30:' wird mit einer beliebigen Zahl im Bereich übereinstimmen? Es wird nicht. – John3136

+0

Ihr erstes Paar von 'Case'-Etiketten findet nur 2 Werte: 1 und 30; sie ignorieren 2..29. Dito für die nächste 'Reichweite', usw. Mit nur Schalter, Sie sind in einer Welt der Schmerzen. –

Antwort

21

Mit GCC und Klirren, können Sie Fall verwenden Bereiche, wie folgt aus:

switch (x){ 

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

Die einzige Cross-Compiler Lösung ist case-Anweisungen wie folgt zu verwenden:

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: Mit etwas auf die Wirkung von switch (x/10) ist eine andere gute Möglichkeit, dies zu tun. Es kann einfacher sein, GCC-Fallbereiche zu verwenden, wenn die Bereiche keine Unterschiede von 10 sind, aber auf der anderen Seite könnte Ihr Professor eine GCC-Erweiterung nicht als Antwort nehmen.

7

Wenn die Bereiche konsistent sind, dann können Sie einige der Daten wegzuwerfen:

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

    // etc ... 
} 

Sonst wirst du an den Rändern ein wenig hackery zu tun haben.

+0

+1: Mehr oder weniger - "(x - 1)/10" würde "[012]" für 1..30 ergeben; wiederholen. Das Problem wird -8..0 (auch 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

Ihre aktuelle Verwendung von 'ceil()' ist etwas falsch. Sie versuchen es an der ganzzahligen Division von "x" durch "30", die bereits ganzzahlig ist, weil die Ganzzahldivision leer ist. Vielleicht meinst du "ceil (x/30.0)"? –

+0

Nehmen Sie Änderungen vor, indem Sie meine Antwort bearbeiten. – uhs

+2

Leider kann ich das selbst nicht tun, da die Bearbeitung weniger als 6 Zeichen umfasst. Wenn Sie das selbst tun könnten, würde ich gerne diese beiden Kommentare löschen. –