Tutoriales de informática - Abrirllave.com

Abrirllave.com

Ejemplo de lenguaje C - Menú de opciones

Si en lenguaje C se quiere escribir un programa que:

1º) Muestre un menú con 4 opciones:

2º) Pida por teclado la opción deseada (dato entero).

3º) Ejecute la opción del menú seleccionada.

4º) Repita los pasos 1º, 2º y 3º, mientras que, el usuario no seleccione la opción 4 (Salir) del menú.

En pantalla se verá, por ejemplo:

Visualización en pantalla del programa Menú de opciones, resuelto en lenguaje C.

Solución 1: anidando una instrucción switch en un bucle do...while

/* Programa: Tabla de multiplicar de un número (Solución 1) */

#include <math.h>
#include <stdio.h>

int main()
{
    int n, opcion;

    do
    {
        printf( "\n   1. Calcular el doble de un n%cmero entero.", 163 );
        printf( "\n   2. Calcular la mitad de un n%cmero entero.", 163 );
        printf( "\n   3. Calcular el cuadrado de un n%cmero entero.", 163 );
        printf( "\n   4. Salir." );
        printf( "\n\n   Introduzca opci%cn (1-4): ", 162 );

        scanf( "%d", &opcion );

        /* Inicio del anidamiento */

        switch ( opcion )
        {
            case 1: printf( "\n   Introduzca un n%cmero entero: ", 163 );
                    scanf( "%d", &n );
                    printf( "\n   El doble de %d es %d\n\n", n, n * 2 );
                    break;

            case 2: printf( "\n   Introduzca un n%cmero entero: ", 163 );
                    scanf( "%d", &n );
                    printf( "\n   La mitad de %d es %f\n\n", n, ( float ) n / 2 );
                    break;

            case 3: printf( "\n   Introduzca un n%cmero entero: ", 163 );
                    scanf( "%d", &n );
                    printf( "\n   El cuadrado de %d es %d\n\n", n, ( int ) pow( n, 2 ) );
         }

         /* Fin del anidamiento */

    } while ( opcion != 4 );

    return 0;
}
Visualización en pantalla del programa Menú de opciones, sin filtro.

Solución 2: filtrando la opción introducida por el usuario

/* Programa: Menú de opciones (Solución 2) */

#include <math.h>
#include <stdio.h>

int main()
{
    int n, opcion;

    do
    {
        printf( "\n   1. Calcular el doble de un n%cmero entero.", 163 );
        printf( "\n   2. Calcular la mitad de un n%cmero entero.", 163 );
        printf( "\n   3. Calcular el cuadrado de un n%cmero entero.", 163 );
        printf( "\n   4. Salir." );

        /* Filtramos la opción elegida por el usuario */
        do
        {
            printf( "\n   Introduzca opci%cn (1-4): ", 162 );
            scanf( "%d", &opcion );

        } while ( opcion < 1 || opcion > 4 );
        /* La opción sólo puede ser 1, 2, 3 ó 4 */

        switch ( opcion )
        {
            case 1: printf( "\n   Introduzca un n%cmero entero: ", 163 );
                    scanf( "%d", &n );
                    printf( "\n   El doble de %d es %d\n\n", n, n * 2 );
                    break;

            case 2: printf( "\n   Introduzca un n%cmero entero: ", 163 );
                    scanf( "%d", &n );
                    printf( "\n   La mitad de %d es %f\n\n", n, ( float ) n / 2 );
                    break;

            case 3: printf( "\n   Introduzca un n%cmero entero: ", 163 );
                    scanf( "%d", &n );
                    printf( "\n   El cuadrado de %d es %d\n\n", n, ( int ) pow( n, 2 ) );
         }

    } while ( opcion != 4 );

    return 0;
}

Solución 3: declarando la variable opcion de tipo carácter

/* Programa: Menú de opciones (Solución 3) */

#include <math.h>
#include <stdio.h>

int main()
{
    char opcion;
    int n;

    do
    {
        printf( "\n   1. Calcular el doble de un n%cmero entero.", 163 );
        printf( "\n   2. Calcular la mitad de un n%cmero entero.", 163 );
        printf( "\n   3. Calcular el cuadrado de un n%cmero entero.", 163 );
        printf( "\n   4. Salir." );

        do
        {
            printf( "\n   Introduzca opci%cn (1-4): ", 162 );
            fflush( stdin );
            scanf( "%c", &opcion );

        } while ( opcion < '1' || opcion > '4' );

        switch ( opcion )
        {
            case '1': printf( "\n   Introduzca un n%cmero entero: ", 163 );
                      scanf( "%d", &n );
                      printf( "\n   El doble de %d es %d\n\n", n, n * 2 );
                      break;

            case '2': printf( "\n   Introduzca un n%cmero entero: ", 163 );
                      scanf( "%d", &n );
                      printf( "\n   La mitad de %d es %f\n\n", n, ( float ) n / 2 );
                      break;

            case '3': printf( "\n   Introduzca un n%cmero entero: ", 163 );
                      scanf( "%d", &n );
                      printf( "\n   El cuadrado de %d es %d\n\n", n, ( int ) pow( n, 2 ) );
         }

    } while ( opcion != '4' );

    return 0;
}