Estructura de control switch en lenguaje C


En nuestra entrega anterior revisamos el uso del if, que nos permite realizar acciones de acuerdo a si se cumplen ciertas condiciones. También vimos que podemos anidar multiples if’s para acotar cierta condición. Bueno todo muy bien pero que sucede por ejemplo si tenemos una variable calificación que va de 1 a 10 esto implicaría construir 10 if-else ¿no? Básicamente si, pero hoy vamos a ver otra forma de realizar esto con un poco más de “facilidad” (lo pongo entrecomillado porque la facilidad siempre es relativa)

 

Estructura switch

La estructura switch acepta datos de tipo int y char (que si hablamos rigurosamente también es un int). Veamos un ejemplo:

    int calificacion=10;/
    char c='a';

    switch (calificacion){
        case 10:
            printf("Felicidades tienes un diez");
        break;

        default:
            printf("Tienes menos de diez");
        break;

    }

    switch (c){
        case 'a':
            printf("a");
        break;

        case 'b':
            printf("a");
        break;

        default:
            printf("Otra letra");
        break;

    }

Notemos que para un caso especifico utilizamos case acompañado del elemento seleccionado, si queremos un elemento “general” utilizamos default y solo ingresará a este en caso de no haber ingresado a ningún otro case.

¿Para qué sirve el break en el switch?

 

Seguramente te debes de estar haciendo esta pregunta, básicamente sirve para cortar el “flujo” del programa, es decir que una vez que haya ingresado  a una condición no entre a ninguna otra. Entonces como podrás deducir en la ultima condición (usualmente el default) no hace falta ponerlo, dado que ahí termina el switch. Veamos un par de ejemplos

 

 

int calificacion=10;

        switch (calificacion){//En este caso entrará al case 10, 9 y al default
            case 8:
                printf("Felicidades tienes un ocho\n");
            break;
            case 10:
                printf("Felicidades tienes un diez\n");
            //break;
            case 9:
                printf("Felicidades tienes un nueve\n");
            //break;
            default:
                printf("Tienes menos de diez\n");
            break;

        }

 

Y aunque este comportamiento podría ser asumido como erróneo, si lo utilizamos de forma inteligente nos puede ahorra código ¿Cómo? Bueno eso se los dejo de tarea ;).

 

Rangos en el switch

 

Si quisiéramos saber si un número se encuentra entre un determinado rango por ejemplo 1 a 3 tendríamos las siguientes formas de hacerlo:

 

 

//Forma 1:
switch (n){
    case 1:
        //código
    break;
    case 2:
        //código
    break;
    case 3:
        //código
    break;    
}

//Forma 2:
switch (n){
    case 1:    
    case 2:
    case 3:
        //código
    break;    
}

 

Pero ¿y si tenemos que elegir entre un rango de cien, mil , diez mil números? Esta solución no suena muy apropiada ¿verdad? Sin duda muchos se decantarían por usar la condicional if, pero como en este capitulo estamos hablando de switch les enseñare la forma de realizarlo, de hecho es un recurso poco utilizado y que muchos creen que no se puede llevar acabo. Supongamos que deseamos saber si un número esta entre diez y cien mil.

 

 

switch (n){
    case 10 ... 100000:
        //código
    break;
      
}

 

Con solo saber este tip ya saben algo que muuuuuuuchos porgramadores ignoran (incluido yo antes de hacer el presente tutorial XD).

Notar que si hacemos cosas como poner un rango decreciente estilo 14 … 1 (a … b) no va funcionar, imagino que esto se debe a que su implementación debe ser un if que busca que n >= a && n<=b.

 

Dudas

 

¿Qué pasa si coloco código fuera de los case?

R: Nada, sencillamente lo ignorará o en el peor de los casos puede marcarnos error.

 

 

 

¿Qué pasa con los case duplicados ?

R:Si duplicamos un case, o si agregamos un case que ya se encuentra contenido en un rango nos ganaremos un bonito compilation error.

 

switch (n){
    printf("Esto no se mostrará");
    if(n==n) printf("Esto tampoco no se mostrará");
    case 10 ... 100000:
        //código
    break;
    
    case 15: //producirá error por considerarlo un caso repetido
        //código
    break;
      
}

 

Ejercicio:

Solicitar por medio del teclado un caracter, imprimir de que caracter se trata (letra, número, otro) e imprimirlo de la siguiente forma:

Si es una letra: La letras es:

Si es un número: El número es:

En otro caso: El caracter es.

 

Casos:

Entrada: a Salida: La letra es: a

Entrada: 4 Salida: El número es 4

Ejemplos y ejercicio resuelto

 

{lang: 'es'}

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *