2017-11-06 1 views
0

Ich lerne gerade die Grundlagen der C-Programmierung und war dabei, die switch-statement auszuprobieren. Meine Fragen ist:Warum kannst du nicht || verwenden? in einem Schalterfall?

switch (answer) 
    { 
    case ('Y' || 'y') : 
     printf("\nYay! Me too. "); 
     break; 
    case ('N' || 'n') : 
     printf("\nBoo! :("); 
     break; 

    default: 
     printf("\nInput error!"); 
     break; 
    } 

Warum kann ich ein schreiben || in meinen verschiedenen Fällen?

+0

Da Fall erfordert konstanten Ausdruck als Wert –

+0

Weil. C ist einfach nicht so konzipiert. Verwenden Sie stattdessen "case" 2 mal. –

+0

Werfen Sie einen Blick darauf. https://stackoverflow.com/questions/11995568/how-do-you-have-logic-or-in-case-part-of-switch-statment –

Antwort

6

Schaltergehäuse bietet keine Unterstützung für logische Operationen. In Ihrem Fall ist die Lösung einfach:

switch (answer) 
{ 
case 'Y': 
case 'y': 
    printf("\nYay! Me too. "); 
    break; 
case 'N': 
case 'n': 
    printf("\nBoo! :("); 
    break; 

default: 
    printf("\nInput error!"); 
    break; 
} 
2

Da der Wert für Groß-/Kleinschreibung keine Boolesche ist.

können Sie Durchfall verwenden, um die Wirkung, die Sie suchen zu erreichen:

für einen Fall
switch(answer) { 
    case 'Y': 
    case 'y': 
      printf... etc 
4

Der Konstant Ausdruck muss der gleiche Datentyp wie die Variable in dem Schalter sein, und es muss sein eine Konstante oder ein Literal.

so etwas wie die folgenden Schritte aus:

case 'Y': 
case 'y': 
    printf("Got a Y!"); 
    break; 
5

Zunächst einmal wechseln requires the case` Ausdrücke Konstanten zu sein, also Ausdrücke sind nicht erlaubt.

Aber selbst wenn Ausdrücke erlaubt waren (wie es in anderen Sprachen der Fall ist, die viel von C-Syntax kopiert haben, wie PHP und Javascript), würde es nicht tun, was Sie wollen. Die Aussage

case <value>: 

ist analog zu:

if (answer == (<value>)) 

Also, wenn Sie schreiben:

case ('N' || 'n'): 

es ist wie:

if (answer == ('N' || 'n')) 

Der Ausdruck 'N' || 'n' als boolean ausgewertet , was 1 zurückgibt. Es entspricht also:

case (1): 

was offensichtlich nicht das ist, was Sie wollen.

können Sie entweder

switch (tolower(answer)): 

und dann haben Sie nur mit dem Kleinbuchstaben zu vergleichen, oder Sie können den Durchfallverhalten case Aussagen mehrerer verwenden:

case 'N': 
case 'n': 
2

Switch erfordert konstante Ausdrücke. Sie haben zwei Möglichkeiten:

1) Unter Verwendung fallen durch

switch (answer) 
{ 
case 'a': 
case 'b': 

    <code for 'a' or 'b'> 

    break; 
} 

2) In diesem speziellen Fall können Sie Ihre Eingabe normalisieren, etwas analog zu einer tolower Funktion.Zum Beispiel:

switch (tolower(answer)) 
{ 
case 'a': 
    <code for 'a' or 'A'> 

    break; 
} 
Verwandte Themen