switch (Case)
El cuerpo de la instrucción switch consta de una serie de etiquetas case y una etiqueta opcional default. Ninguna de la dos expresiones constantes en las instrucciones case se puede evaluar en el mismo valor. La etiqueta default solo puede aparecer una vez. Las instrucciones con etiquetas no son requisitos sintácticos, pero la instrucción switch no tiene sentido sin ellas. La instrucción predeterminada no necesita estar al final; puede aparecer en cualquier parte del cuerpo de la instrucción switch. Una etiqueta case o default solo puede aparecer en una instrucción switch.
El elemento constant-expression de cada etiqueta case se convierte al tipo de expression y se compara con expressionpara determinar si son iguales. El control pasa a la instrucción que tenga el mismo valor en case constant-expressionque en expression. El comportamiento resultante se muestra en la siguiente tabla.
Comportamiento de la instrucción switch
Condition
El valor convertido coincide con el de la expresión de control promovida.
Ninguna de las constantes coincide con las constantes de las etiquetas case; hay una etiqueta default.
Ninguna de las constantes coincide con las constantes en las etiquetas case; no hay una etiqueta default.
Acción
El control se transfiere a la instrucción que sigue a esa etiqueta.
El control se transfiere a la etiqueta default.
El control se transfiere a la instrucción situada detrás de la instrucción switch.
Si se encuentra una expresión coincidente, las etiquetas case o default siguientes no impiden que se transfiera el control. La instrucción break se utiliza para detener la ejecución y transferir el control a la instrucción situada detrás de la instrucción switch. Sin una instrucción break, se ejecuta cada instrucción de la etiqueta case coincidente hasta el final de la instrucción switch, incluida default. Por ejemplo:
// switch_statement1.cpp
#include <stdio.h>
int main()
{
char *buffer = "Any character stream";
int capa, lettera, nota;
char c;
capa = lettera = nota = 0;
while ( c = *buffer++ ) // Walks buffer until NULL
{
switch ( c )
{
case 'A':
capa++;
break;
case 'a':
lettera++;
break;
default:
nota++;
}
}
printf_s( "\nUppercase a: %d\nLowercase a: %d\nTotal: %d\n",
capa, lettera, (capa + lettera + nota) );
}