Je crée une application console et j'utilise une instruction switch
pour créer un système de menus simple. L'entrée utilisateur se présente sous la forme d'un caractère unique qui s'affiche à l'écran sous forme de majuscule. Cependant, je veux que le programme accepte à la fois les minuscules et les majuscules.
Je comprends que les instructions switch
sont utilisées pour comparer les 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 ce n'est pas possible, existe-t-il une solution? Je ne veux vraiment pas répéter le code.
Par ici:
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
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;
}
c'est-à-dire: en raison de l'absence d'un break
, l'exécution du programme se répercute en cascade dans le bloc suivant. Ceci est souvent appelé "chute".
Cela dit, vous pouvez bien sûr simplement normaliser le cas de la variable 'menuChoice' dans ce cas via toupper/tolower.
Vous pouvez (et pour des raisons de réductibilité, devriez) avant de saisir l'instruction switch, utilisez tolower fnc sur votre var.
'q' || 'Q'
résulte en bool type result (true) qui est promu en type intégral utilisé dans la condition de commutation (char) - donnant la valeur 1. Si le compilateur permettait d'utiliser la même valeur (1) dans plusieurs étiquettes, lors de l'exécution de l'instruction switchmenuChoice
serait comparée à la valeur 1 dans chaque cas. Si menuChoice
avait la valeur 1, le code sous la première étiquette de cas aurait été exécuté.
Par conséquent, les réponses suggérées ici utilisent la constante de caractère (qui est de type char) comme valeur intégrale dans chaque étiquette de cas.
Utilisez simplement tolower()
, voici mon homme:
SYNOPSIS
# inclure ctype.hint 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 RENVOYÉE La valeur renvoyée est celle de la lettre convertie, ou c si la conversion n'a pas été possible.
Ainsi, dans votre exemple, vous pouvez switch()
avec:
switch(tolower(menuChoice)) {
case('q'):
// ...
break;
case('s'):
// ...
break;
}
Bien sûr, vous pouvez utiliser à la fois toupper()
et tolower()
, avec des majuscules et des majuscules.
switch (toupper(choice))
{
case 'Q':...
}
... ou tolower.
si tu fais
case('s' || 'S'):
// some code
default:
// some code
s
et S
seront ignorés et le code par défaut s'exécutera chaque fois que vous saisirez ces caractères. Vous pouvez donc décider d'utiliser
case 's':
case 'S':
// some code
ou
switch(toupper(choice){
case 'S':
// some code.
toupper
vous aurez besoin d'inclure ctype.h
.