2014-10-13 1 views
5

Wie kann ich eine switch-case-Anweisung vornehmen, damit Groß- und Kleinschreibung nicht berücksichtigt wird? sagen, dass ich so etwas wie dies gemacht:Wie kann ich bei switch-case-Anweisungen die Groß-/Kleinschreibung beachten?

#include <stdio.h> 

char choice; 
int main() 
{ 
char choice; 
printf("Will you choose A,B, or C?\n>"); 
scanf(" %c", &choice); 

switch(choice) 
{ 
    case 'A': 
     printf("The First Letter of the Alphabet"); 
     break; 
    case 'B': 
     printf("The Second Letter of the Alphabet"); 
     break; 
    case 'C': 
     printf("The Third Letter of the Alphabet"); 
     break; 
} 
} 

würde es nur in Großbuchstaben antworten. Wie reagiere ich auf Kleinbuchstaben?

+0

Groß-/Kleinschreibung Ihrer Wahl. –

Antwort

14

Sie müssen einfach: -

switch(choice) 
{ 
case 'A': 
case 'a': 
    printf("The First Letter of the Alphabet"); 
    break; 
case 'B': 
case 'b': 
    printf("The Second Letter of the Alphabet"); 
    break; 
case 'C': 
case 'c': 
    printf("The Third Letter of the Alphabet"); 
    break; 
} 

usw. Ihre Serie fortzusetzen.

Tatsächlich, was es tut, ist, dass es umgeht (skims) bis zum Boden, bis es die erste break-Anweisung findet, die dem Fall entspricht, wodurch alle dazwischen auftretenden Fälle ausgeführt werden !!!

+2

Ich wollte das schreiben, aber mein Touchpad (Lenovo) ist böse. Sehr sehr böse gebrochen. Du hast gewonnen. :) +1 –

+0

Vielen Dank. Mein C-Lernbuch sagte nichts davon, bevor er zur nächsten Wahlmethode überging. – Jeremy

+0

@ Prof.Falken-Professor., Gleich hier! Aber ich weiß nicht, wie ich das Rennen gewonnen habe. Ha-ha-ha ... –

30

toupper in <ctype.h> ein Zeichen in Großbuchstaben umwandelt:

#include <stdio.h> 
#include <ctype.h> 

char choice; 
int main() 
{ 
printf("Will you choose A,B, or C?\n>"); 
scanf(" %c", &choice); 

switch(toupper(choice)) // Changed line 
{ 
    case 'A': 
     printf("The First Letter of the Alphabet"); 
     break; 
    case 'B': 
     printf("The Second Letter of the Alphabet"); 
     break; 
    case 'C': 
     printf("The Third Letter of the Alphabet"); 
     break; 
} 
+1

Ich bevorzuge diese Methode eigentlich. Scheint eleganter und weniger fehleranfällig. Vor allem in diesem Fall, wo Sie speziell auf die Fall-Insensitivierung schauen. – JoErNanO

+2

@JoErNanO, im allgemeinen Fall ja, aber es ist auch gut zu verstehen, dass das Fallkonstrukt mehrere "Fälle" hintereinander annehmen kann. Ich mag beide Antworten. Wenn Sie den Benutzer 'toupper()' benutzen, müssen Sie sich der Einschränkungen und Macken der Laufzeit bewusst sein, falls zutreffend. http://stackoverflow.com/questions/12493496/c-c-utf-8-upper-lowe-case-conversions Wenn Sie mehrere "case" verwenden, müssen Sie sich der Einschränkungen des Compilers bewusst sein. Es kann beispielsweise nur ASCII akzeptieren. Kompromisse. :) –

+0

@Prof. Falken stimme ich absolut zu. – JoErNanO

6

Vor dem Schalter(), fügen:

choice = toupper(choice); 

Und wenn Sie nicht bereits erhalten haben, #include <ctype.h> den Prototyp zu erhalten .

1

Sie können zwei Fälle einer nach dem anderen, geben

switch(choice) 
{ 
case 'A': 
case 'a': 
    printf("The First Letter of the Alphabet"); 
    break; 
case 'B': 
case 'b': 
    printf("The Second Letter of the Alphabet"); 
    break; 
case 'C': 
case 'c': 
    printf("The Third Letter of the Alphabet"); 
    break; 
} 
Verwandte Themen