Inicio | Artículos | Cursos Online | Libros | Diccionario | Mapa Web | Enlazar | Contactar | Acerca de


C/C++/C# HTML Java JavaScript Linux PHP Python Swift
CURSO/TUTORIAL DE LENGUAJE C
Introducción
Introducción
Fases de la Puesta a Punto de un Programa en C
Estructura de un Programa
Tipos de Instrucciones
Mi primer Programa
Elementos Básicos
Tipos de Datos
Identificadores
Variables
Constantes
Operadores y Expresiones
Funciones printf y scanf
Comentarios
La Función fflush
Tipos de Errores
Instrucciones de Control
Instrucciones Alternativas
Instrucciones Repetitivas
Instrucciones De Salto
CarlosPes.comCurso 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:
Categorías de 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.
Artículos Interesantes
Artículos de Desarrollo Web
Artículos de Informática
Artículos de Programación
Artículos de SEO
Cursos/Tutoriales de Informática
Curso/Tutorial de Algoritmos
Curso/Tutorial de Informática Básica
Curso/Tutorial de Ingeniería del Software
Curso/Tutorial de Lenguaje C
Curso/Tutorial de Marketing en Internet
Curso/Tutorial de Turbo Pascal
Curso/Tutorial de Representación de los Datos
Curso/Tutorial para Webmasters
Curso/Tutorial Web 2.0
Curso de SEO
Libros de Carlos Pes
36 Pasos Básicos para Desarrollar un Sitio Web
Empezar de Cero a Programar en Lenguaje C
Fundamentos del SEO
Libros Recomendados
Libros de Analítica Web
Libros de Desarrollo Web
Libros de Java
Libros de Lenguaje C
Libros de Marketing Online
Libros de Pascal (Turbo Pascal)
Libros de SEO
Libros de Visual Basic
Recursos de Informática
Diccionario de Informática
Ejercicios de Programación
Guías de uso de Software
Sintaxis de Lenguajes de Programación
Biografías
Entrevistas
Frases y Citas
Recursos Educativos
Presentaciones Educativas
Videos Educativos
Enlaces Web
Acerca de Carlos Pes
Bibliotecas
Colaboradores
Contactar
Enlazar
Librerías
Perfiles en Internet
Mapa Web
Blog de Carlos Pes Blog de Carlos Pes
© CarlosPes.com | Privacidad | Condiciones