switch program examples definicion code blocks c++ switch-statement condition or-operator

program - switch case code blocks c++



Cambie la declaraciĆ³n usando o (6)

De esta manera:

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

Más sobre ese tema: http://en.wikipedia.org/wiki/Switch_statement#C.2C_C.2B.2B.2C_Java.2C_PHP.2C_ActionScript.2C_JavaScript

Estoy creando una aplicación de consola y utilizando una instrucción de switch para crear un sistema de menú simple. La entrada del usuario es en forma de un solo carácter que se muestra en pantalla como una letra mayúscula. Sin embargo, quiero que el programa acepte mayúsculas y minúsculas.

Entiendo que las instrucciones de switch se utilizan para comparar con las constantes, pero ¿es posible hacer algo como lo siguiente?

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

Si esto no es posible, ¿hay alguna solución? Realmente no quiero repetir el código.


La sintaxis generalmente aceptada para esto es:

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

es decir: debido a la falta de una break , la ejecución del programa se convierte en cascada en el siguiente bloque. Esto a menudo se conoce como "caída a través".

Dicho esto, puede, por supuesto, simplemente normalizar el caso de la variable ''menuChoice'' en este caso a través de toupper / tolower.


Solo usa tolower() , aquí está mi hombre:

SINOPSIS
#incluir ctype.h

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

DESCRIPCIÓN toupper () convierte la letra c a mayúsculas, si es posible.

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.

VALOR DEVUELTO El valor devuelto es el de la letra convertida, o c si la conversión no fue posible.

Así que en tu ejemplo puedes switch() con:

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

Por supuesto, puede utilizar tanto toupper() como tolower() , con mayúsculas y mayúsculas.


Usted podría (y por razones de redabilidad, debería) antes de ingresar la instrucción de cambio, use tolower fnc en su var.


''q'' || ''Q'' ''q'' || ''Q'' da como resultado un resultado de tipo bool ( verdadero ) que se promueve al tipo integral usado en la condición de cambio ( char ), lo que da el valor 1. Si el compilador permitió que se usara el mismo valor (1) en varias etiquetas, durante la ejecución de la instrucción del interruptor menuChoice se compararía con el valor de 1 en cada caso. Si menuChoice tuviera el valor 1, entonces el código bajo la primera etiqueta de caso se habría ejecutado.

Por lo tanto, las respuestas sugeridas aquí utilizan la constante de caracteres (que es de tipo char ) como valor integral en cada etiqueta de caso.


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

... o en tolower.