Déclaration de commutateur à l'aide ou
-
11-10-2019 - |
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.
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
.