Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


2.10. switch

Si queremos analizar varios posibles valores de una misma variable, puede resultar muy pesado tener que hacerlo con muchos "if" seguidos o encadenados:

/*  ej021001.c                */
/*  Acercamiento a "switch"   */
/*  Ejemplo del apartado 2.10 */
/*  Curso de C, Nacho Cabanes */

#include 

int main()
{
    int n;

    printf("Introduce un número del 1 al 5: ");
    scanf("%d", &n);
    
    if (n==1)
        printf("Uno");
    else if (n==2)
        printf("Dos");
    else if (n==3)
        printf("Tres");
    else if (n==4)
        printf("Cuatro");
    else if (n==5)
        printf("Cinco");
    else 
        printf("No es del uno al cinco");

    return 0;
}

La alternativa es la orden "switch", cuya sintaxis es

switch (expresión)
{
    case valor1: 
        sentencia1;
        break;
    case valor2: 
        sentencia2;
        sentencia2b;
        break;
    ...
    case valorN: 
        sentenciaN;
        break;
    default:
        otraSentencia;
}

Es decir:

Así, una versión alternativa del programa anterior podría ser:

/*  ej021002.c                */
/*  Contacto con "switch"     */
/*  Ejemplo del apartado 2.10 */
/*  Curso de C, Nacho Cabanes */

#include 

int main()
{
    int n;

    printf("Introduce un número del 1 al 5: ");
    scanf("%d", &n);
    
    switch(n)
    {
        case 1: printf("Uno"); break;
        case 2: printf("Dos"); break;
        case 3: printf("Tres"); break;
        case 4: printf("Cuatro"); break;
        case 5: printf("Cinco"); break;
        default: printf("No es del uno al cinco");
    }

    return 0;
}

Un ejemplo más detallado, que demuestre más detalles de la sintaxis de "switch", puede ser:

/*  ej021003.c                */
/*  Uso de "switch"           */
/*  Ejemplo del apartado 2.10 */
/*  Curso de C, Nacho Cabanes */

#include 

int main()
{
    int n;

    printf("Introduce un número del 1 al 10: ");
    scanf("%d", &n);
    
    switch(n)
    {
        case 1: 
            printf("Uno."); 
            break;
        case 2: 
        case 3: 
        case 4: 
            printf("Dos, tres o cuatro."); 
            break;
        case 10: 
            printf("Diez, múltiplo de... "); 
        case 5: 
            printf("Cinco."); 
            break;
        case 6: 
        case 7: 
        case 8: 
            printf("Seis, siete u ocho."); 
            break;
        default: 
            printf("No está entre uno y diez.");
    }

    return 0;
}

En este programa:

Las órdenes "switch" se utilizan también con frecuencia para analizar letras introducidas por el usuario, como veremos pronto.

Ejercicio propuesto 2.10.1: Crea un programa que pida al usuario que introduzca un número -1, 0 ó 1, y dirá si es negativo, positivo o cero. Esta primera versión debe usar "if".
Ejercicio propuesto 2.10.2: Crea un programa que pida al usuario que introduzca un número -1, 0 ó 1, y dirá si es negativo, positivo o cero. Esta segunda versión debe usar "switch".
Ejercicio propuesto 2.10.3: Crea un programa un poco más exhaustivo, que pida al usuario que introduzca un número entre -3 y +3, ambos incluidos, y diga si es negativo, positivo o cero. Esta versión debe usar "if".
Ejercicio propuesto 2.10.4: Crea una versión del programa que pide al usuario que introduzca un número entre -3 y +3, ambos incluidos, y dice si es negativo, positivo o cero. Esta nueva versión debe usar "sitch".