Está en la página 1de 4

28/3/2018 Estructura SWITCH

4.2) Estructura switch.

Esta estructura permite considerar decisiones para más de dos posibilidades. El formato
general de esta sentencia es:

NOTA: Cada case admite distintas sentencias, y a su vez, podemos poner distintas etiquetas case
para distintas opciones dentro de un mismo switch.

La variable <var> se evalúa y compara sucesivamente con todas las constantes que
aparecen junto a la palabra reservada case. Si alguna de ellas es igual al valor de
<var>se ejecuta la sentencia o bloque de sentencias correspondientes. Si no aparece la
palabra reservada break, continúa la comparación con el resto de las opciones. Si
aparece break, se termina la ejecución de la estructura switch. La opción default, es
opcional, indica la sentencia que se ejecuta en caso de que el valor de la variable
<var> no se corresponda con ninguna de las constantes expresadas. La estructura
switch no permite que dos constantes tengan el mismo valor. Si se evalúan constantes
de caracteres, se emplean sus equivalentes numéricos.

Ejemplo: Aquí presentamos un ejemplo de switch con el uso de un bucle while (se verá en el
capítulo siguiente). Dada la cadena "BuEnos dIas.". Cuenta el número de vocales (ya sean
mayúsculas o minúsculas). Lo presentamos en forma de traza.

Ejemplos.

Se puede tener un switch formando parte de la secuencia de sentencias de otro switch. Incluso si
las constantes case del switch interior y del exterior contienen valores comunes, no aparecen
http://decsai.ugr.es/~jfv/ed1/c/cdrom/cap4/cap42.htm 1/4
28/3/2018 Estructura SWITCH

conflictos.

Ejemplo.

Ejemplos de estructura switch:

Ejemplo 1:

#include<stdio.h>
main() {
char ch;
printf("Introduzca una vocal: ");
ch=getchar();
switch(ch) {
case 'a': puts("Se ha pulsado una a.");
break;
case 'e': puts("Se ha pulsado una a.");
break;
case 'i': puts("Se ha pulsado una a.");
break;
case 'o': puts("Se ha pulsado una a.");
break;
case 'u': puts("Se ha pulsado una a.");
break;
default: puts("Error");
}
}

NOTA: Vamos seleccionando una determinada opción del case, según sea a, e, i, o, u,
si no es ninguna de ellas la que hemos introducido por teclado por medio de la
función getchar(), ejecutaremos la opción default, que visualizará: Error.

Ejemplo 2:

switch (eleccion=getchar()) {
case 'r':
case 'R':
http://decsai.ugr.es/~jfv/ed1/c/cdrom/cap4/cap42.htm 2/4
28/3/2018 Estructura SWITCH

printf("ROJO");
break;
case 'b':
case 'B':
printf("BLANCO");
break;
case 'a':
case 'A':
printf("AZUL");
break;
}

NOTA: Se presentará ROJO si eleccion representa r o R, se presentará BLANCO si


eleccion representa b o B, y AZUL si eleccion representa a o A. No se visualizará
nada si eleccion tiene asignado algún otro carácter. Si nos damos cuenta, en este
ejemplo, cada grupo de sentencias tiene dos etiquetas case para contemplar
mayúsculas y minúsculas, de la misma forma, cada uno de los dos primeros grupos
acaba con la sentencia break.La sentencia break transfiere el control fuera de la
sentencia switch para que no se ejecute más de un grupo de sentencias.

Ejemplo 3:

switch (eleccion=toupper(getchar())) {
case 'R':
printf("ROJO");
break;
case 'B':
printf("BLANCO");
break;
case 'A':
printf("AZUL");
break;
default:
printf("ERROR");
}

NOTA: La función toupper me pasa a mayúscula el carácter que introduzca, si el


carácter introducido no es ni R, ni B, ni A, por medio de default visualizaré la
palabra: ERROR.

Ejemplo 4: Suponemos indicador una variable entera, x e y, variables de coma flotante:

switch (indicador) {
case -1:

http://decsai.ugr.es/~jfv/ed1/c/cdrom/cap4/cap42.htm 3/4
28/3/2018 Estructura SWITCH

y=x * x;
break;
case 0:
y=x/2;
break;
case 1:
y=x;
break;
case 2:
case 3:
y=2 * (x+1);
break;
default:
y=0;
}

NOTA: En este ejemplo asigno a y un determinado valor, según lo que valga la


variable indicador, pudiendo ser -1, 0, 1, y 2 ó 3 (ya que en este último caso, tanto si
es 2, como si es 3, asignaré a la variable y el valor de 2*(x+1)); en caso de no ser
indicador ninguno de los valores mencionados anteriormente, asignaremos a la y el
valor de 0.

Ejemplos de estructuras anidadas con switch:

Ejemplo 1:

switch(x) {
case 1:
switch(y) {
case 0: printf("error de división por cero");
break;
case 1: x=1;
y=7;
}
break;
case 2:
...........
...........

/* si al entrar al switch la x tiene el valor de 1, entonces entraré en el siguiente switch,


y me comportaré como en un switch normal, tener en cuenta que el break del
switch(y) me sacaría fuera de este switch, por eso encuentro, otro break, al final del
case 1 del switch(x), que me saca fuera de este otro switch. */

http://decsai.ugr.es/~jfv/ed1/c/cdrom/cap4/cap42.htm 4/4