Question

Je crée une application de la console et en utilisant une instruction switch pour créer un système de menu simple. Entrée utilisateur est sous la forme d'un caractère unique qui affiche à l'écran comme une lettre majuscule. Cependant, je ne veux que le programme d'accepter les caractères à faible revenu et majuscules.

Je comprends que les déclarations de switch sont utilisés pour comparer à des constantes, mais est-il possible de faire quelque chose comme ce qui suit?

switch(menuChoice) {
    case ('q' || 'Q'):
        //Some code
        break;
    case ('s' || 'S'):
        //More code
        break;
    default:
        break;
}

Si cela est impossible, est-il une solution? Je ne veux vraiment pas le code de répétition.

Était-ce utile?

La solution

De cette façon:

 switch(menuChoice) {
    case 'q':
    case 'Q':
        //Some code
        break;
    case 's':
    case 'S':
        //More code
        break;
    default:
 }

En savoir plus sur ce sujet: http://en.wikipedia.org/wiki/Switch_statement# C.2C_C.2B.2B.2C_Java.2C_PHP.2C_ActionScript.2C_JavaScript

Autres conseils

La syntaxe généralement acceptée pour cela est:

switch(menuChoice) {
    case 'q':
    case 'Q':
        //Some code
        break;
    case 's':
    case 'S':
        //More code
        break;
    default:
        break;
}

i.e. .: En raison de l'absence d'un break, des cascades d'exécution du programme dans le bloc suivant. Ceci est souvent appelé « retombent ».

Cela dit, vous pouvez bien sûr simplement Normaliser le cas de la « menuchoice » variable dans ce cas par l'intermédiaire toupper / tolower.

Il suffit d'utiliser tolower(), voici mon homme:

  

SYNOPSIS          #include ctype.h

   int toupper(int c);
   int tolower(int c);
     

Description          toupper () convertit la lettre c en majuscule, si possible.

   tolower() converts the letter c to lower case, if possible.

   If c is not an unsigned char value, or EOF, the behavior of these
   functions is undefined.
     

VALEUR DE RETOUR          La valeur retournée est celle de la lettre convertie, ou c si le   la conversion n'a pas été possible.

Dans votre exemple, vous pouvez switch() avec:

switch(tolower(menuChoice)) {
    case('q'):
        // ...
        break;
    case('s'):
        // ...
        break;
}

Bien sûr, vous pouvez utiliser les deux toupper() et tolower(), avec le capital et les lettres autres qu'en capital.

Vous pouvez (et pour des raisons de redability, devrait) avant d'entrer dans la déclaration désactiver l'utilisation tolower fnc sur votre var.

Résultats 'q' || 'Q' en bool résultat de type ( true ) qui est promu type intégral utilisé dans un état de commutation ( char ) - donnant la valeur 1. Si le compilateur même valeur autorisée (1) à utiliser dans plusieurs étiquettes, lors de l'exécution de commutateur déclaration menuChoice serait par rapport à la valeur de 1 dans chaque cas. Si menuChoice avait une valeur 1 puis le code sous la première étiquette de cas aurait été exécuté.

Par conséquent des réponses RECOMMANDÉ ici constante de caractères (qui est de type char ) en tant que valeur intégrale de chaque étiquette de cas.

switch (toupper(choice))
{
  case 'Q':...
}

... ou tolower.

si vous faites

case('s' || 'S'):
    // some code
default:
    // some code

Les deux s et S sera ignorée et le code par défaut fonctionnera chaque fois que vous entrez ces caractères. Ainsi, vous pouvez décider d'utiliser

case 's':
case 'S':
    // some code

ou

switch(toupper(choice){
    case 'S':
        // some code.

toupper devra vous inclure ctype.h.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top