|
CarlosPes.com
> Curso
de Lenguaje C
> Instrucción switch en Lenguaje C |
|
Instrucción
switch en
Lenguaje C
|
|
|
|
|
¿Para qué
sirve la instrucción alternativa múltiple
(switch) en
C?
|
|
Una
instrucción switch (alternativa múltiple)
permite
seleccionar, por medio de una expresión, el siguiente bloque
de instrucciones a ejecutar de entre varios posibles. En lenguaje C,
para escribir una instrucción alternativa
múltiple (switch) se utiliza la sintaxis: |
|
switch (
<expresión> )
{
case <expresión_1> : [
<bloque_de_instrucciones_1> ]
[ break; ]
case <expresión_2> : [
<bloque_de_instrucciones_2> ]
[ break; ]
...
case <expresión_n> : [
<bloque_de_instrucciones_n> ]
[ break; ]
[ default : <bloque_de_instrucciones_n+1> ]
}
|
|
|
El
resultado de evaluar la <expresión> debe ser
un valor perteneciente a un tipo de dato finito y ordenado, es decir,
entero, lógico, carácter, enumerado o subrango.
Dependiendo del valor obtenido al evaluar la
<expresión>, se ejecutará un bloque
de instrucciones u otro.
Opcionalmente, se puede escribir un
<bloque_de_instrucciones_n+1> después de default :. Este bloque de instrucciones se
ejecutará en el
caso de que el valor obtenido al evaluar la
<expresión>, no se encuentre en ninguna de las
expresiones después de cada case.
Ejemplo 1: Se quiere escribir un programa que:
1º) Pida por teclado el número (dato entero) de un
día de la semana.
2º) Muestre por pantalla el nombre (dato cadena)
correspondiente a dicho día.
Nota: Si el número de día introducido es menor
que 1 ó mayor que 7, se mostrará el mensaje:
"ERROR: Día incorrecto.".
En pantalla se podrá ver algo parecido a: |
|
Introduzca dia de la semana: 2
Martes |
|
|
O
también: |
|
Introduzca dia de la semana: 9
ERROR: Dia incorrecto. |
|
|
Solución
propuesta: |
|
#include <stdio.h>
int main()
{
int dia;
printf( "\n Introduzca dia de
la semana: " );
scanf( "%d", &dia );
switch ( dia )
{
case 1 : printf(
"\n Lunes" );
break;
case 2 : printf(
"\n Martes" );
break;
case 3 : printf(
"\n Miercoles" );
break;
case 4 : printf(
"\n Jueves" );
break;
case 5 : printf(
"\n Viernes" );
break;
case 6 : printf(
"\n Sabado" );
break;
case 7 : printf(
"\n Domingo" );
break;
default : printf( "\n ERROR:
Dia incorrecto." );
}
return 0;
} |
|
|
En
la sintaxis de una instrucción alternativa
múltiple, obsérvese que, después de
cada bloque de instrucciones se puede escribir, opcionalmente, la
instrucción break. Dicha instrucción no se va
a
estudiar con detenimiento en este apartado, ya que, de momento, basta
con saber que en una instrucción switch, la escribiremos,
casi siempre, después de cada bloque de instrucciones, a
excepción del último. Para comprender su
funcionamiento, pruebe a ver que ocurre si omite algún break en el código del programa
del ejemplo 1.
Estúdiese también el siguiente ejemplo.
Ejemplo 2: En la siguiente tabla se muestran las
categorías
a las que pertenecen los signos del zodíaco: |
|
|
|
Se
quiere escribir un programa que:
1º) Muestre el listado de los signos del zodíaco,
con sus números asociados.
2º) Pida por teclado un número (dato entero)
asociado a un signo del zodíaco.
3º) Muestre la categoría a la que pertenece el
signo del zodíaco seleccionado.
Nota: Si el número introducido por el usuario, no
está asociado a ningún signo del
zodíaco, se mostrará el mensaje: "ERROR:
<número> no está asociado a
ningún signo.".
En pantalla veremos: |
|
Listado de
signos del zodiaco:
1. Aries
2. Tauro
3. Geminis
4. Cancer
5. Leo
6. Virgo
7. Libra
8. Escorpio
9. Sagitario
10. Capricornio
12. Acuario
13. Piscis
Introduzca numero de signo: 7
Es un signo de Aire. |
|
|
O
también: |
|
Listado de
signos del zodiaco:
1. Aries
2. Tauro
3. Geminis
4. Cancer
5. Leo
6. Virgo
7. Libra
8. Escorpio
9. Sagitario
10. Capricornio
12. Acuario
13. Piscis
Introduzca numero de signo: 15
ERROR: 15 no esta asociado a ningun signo. |
|
|
Una
posible solución es: |
|
#include <stdio.h>
int main()
{
int numero;
printf( "\n Listado de signos
del zodiaco:" );
printf( "\n\n 1. Aries" );
printf( "\n 2. Tauro" );
printf( "\n 3. Geminis" );
printf( "\n 4. Cancer" );
printf( "\n 5. Leo" );
printf( "\n 6. Virgo" );
printf( "\n 7. Libra" );
printf( "\n 8. Escorpio" );
printf( "\n 9. Sagitario" );
printf( "\n 10. Capricornio" );
printf( "\n 11. Acuario" );
printf( "\n 12. Piscis" );
printf( "\n\n Introduzca
numero de signo: " );
scanf( "%d", &numero );
switch ( numero )
{
case 1 :
case 5 :
case 9 :
printf( "\n Es un signo de Fuego." );
break;
case 2 :
case 6 :
case 10 : printf(
"\n Es un signo de Tierra." );
break;
case 3 :
case 7 :
case 11 : printf(
"\n Es un signo de Aire." );
break;
case 4 :
case 8 :
case 12 : printf(
"\n Es un signo de Agua." );
break;
default : printf(
"\n ERROR: %d no esta asociado a ningun signo.",
numero );
}
return 0;
} |
|
|
Otra
solución es: |
|
#include <stdio.h>
#include <string.h>
int main()
{
int numero;
char categoria[7];
printf( "\n Listado de signos
del zodiaco:" );
printf( "\n\n 1. Aries" );
printf( "\n 2. Tauro" );
printf( "\n 3. Geminis" );
printf( "\n 4. Cancer" );
printf( "\n 5. Leo" );
printf( "\n 6. Virgo" );
printf( "\n 7. Libra" );
printf( "\n 8. Escorpio" );
printf( "\n 9. Sagitario" );
printf( "\n 10. Capricornio" );
printf( "\n 11. Acuario" );
printf( "\n 12. Piscis" );
printf( "\n\n Introduzca
numero de signo: " );
scanf( "%d", &numero );
switch ( numero % 4 )
{
case 1 :
strcpy( categoria, "Fuego" );
break;
case 2 :
strcpy( categoria, "Tierra" );
break;
case 3 :
strcpy( categoria, "Aire" );
break;
case 0 :
strcpy( categoria, "Agua" );
}
if ( numero >= 1 && numero
<= 12 )
printf(
"\n Es un signo de %s.", categoria );
else
printf(
"\n ERROR: %d no esta asociado a ningun signo.",
numero );
return 0;
} |
|
|
En
esta segunda solución existen las siguientes diferencias
importantes con respecto a la solución anterior:
- En
el código se utiliza una alternativa doble (if else),
además de una alternativa múltiple (switch).
- En
la alternativa múltiple no se escribe el
<bloque_de_instrucciones_n+1>.
- La
<expresión> de la alternativa
múltiple es diferente.
- La
expresión "\n
Es un signo de "
sólo se escribe una vez.
- Se
ha utilizado una variable más (un array de caracteres): categoria.
- Se
ha empleado la función strcpy, que, como ya vimos en el
apartado de Operadores y
expresiones,
está disponible en la
biblioteca estándar de C.
|
|