Ejemplo básico de un menú de opciones en C++

En esta publicación te voy a mostrar un ejemplo básico de un menú de opciones en lenguaje C++ el cual puedes estudiarlo y utilizarlo en tus proyectos de programación. 

Imagen de un menú de opciones

Código fuente

				
					// Plantilla de un Menú de Opciones

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

int main()
{
    int opcion;
    char repetir = TRUE;
    
    do {
        system("cls");
        
        // Texto del menú
        printf("\n\n\t\t\tMenu de Opciones\n");
        printf("\t\t\t----------------\n");
        printf("\n\t1. Sumar dos numeros\n");
        printf("\t2. Restar dos numeros\n");
        printf("\t3. Multiplicar dos numeros\n");
        printf("\t4. Dividir dos numeros\n");
        printf("\t0. SALIR\n");
        
        printf("\n\tIngrese una opcion: ");
        scanf("%d", &opcion);
        
        int numero1, numero2;
		float resultado;
        switch (opcion) {
            case 1:
                // Instrucciones para sumar dos números
                printf("\n\tIngrese primer numero: ");
                scanf("%d", &numero1);
                
                printf("\tIngrese segundo numero: ");
                scanf("%d", &numero2);
                
                printf("\t---------------------------\n");
                resultado = numero1 + numero2;
                printf("\tResultado: %f\n", resultado);
                
                system("pause>nul");
                break;
                
            case 2:
                // Instrucciones para restar dos números
                printf("\n\tIngrese primer numero: ");
                scanf("%d", &numero1);
                
                printf("\tIngrese segundo numero: ");
                scanf("%d", &numero2);
                
                printf("\t---------------------------\n");
                resultado = numero1 - numero2;
                printf("\tResultado: %f\n", resultado);
                
                system("pause>nul");
                break;
                
            case 3:
                // Instrucciones para multiplicar dos números
                printf("\n\tIngrese primer numero: ");
                scanf("%d", &numero1);
                
                printf("\tIngrese segundo numero: ");
                scanf("%d", &numero2);
                
                printf("\t---------------------------\n");
                resultado = numero1 * numero2;
                printf("\tResultado: %f\n", resultado);
                
                system("pause>nul");
                break;
                
			case 4:
                // Instrucciones para dividir dos números
                printf("\n\tIngrese primer numero: ");
                scanf("%d", &numero1);
                
                printf("\tIngrese segundo numero: ");
                scanf("%d", &numero2);
                
                printf("\t---------------------------\n");
                
				if (numero2 == 0) {
                	printf("\tResultado: No se puede dividir por cero.\n"); 
				} else {
					resultado = numero1 / (numero2 * 1.0);
					printf("\tResultado: %f\n", resultado);
				}
                
                system("pause>nul");     
                break;
            
            case 0:
            	repetir = FALSE;
            	break;
        }        
    } while (repetir);
	 
    return 0;
}
				
			

Explicación del código

El programa consiste de un menú de opciones que permite al usuario realizar las operaciones matemáticas básicas: sumar, restar, multiplicar y dividir dos números.

En las líneas 3 y 4 el programa comienza con la inclusión de dos librerías estándar de C: stdio.h y stdlib.h.

En las líneas 6 y 7 se define un par de constantes utilizando la directiva #define: TRUE con valor 1 y FALSE con valor 0. La primera indica que una condición es verdadera y la segunda indica que es falsa.

Entre las líneas 9 a la 104 se define la función principal main()  en la que se comienza definiendo la variable opcion (tipo int) y repetir (tipo char). La variable opcion guarda la opción que el usuario ingresa en el menú (línea 27) y repetir es una variable booleana que indica si se debe repetir el bucle do-while o no (línea 101). La variable repetir se inicializa en TRUE (línea 12), y solo se le cambiará su valor a FALSE cuando se quiera salir del bucle do-while.

Después, el programa ejecuta un bucle do-while (entre las líneas 14 y 101).

Dentro del bucle, se utiliza la función system(“cls”) para limpiar la pantalla (línea 15).

Para mostrar los textos en la pantalla se usa la función printf().

En la línea 27, el usuario ingresa una opción y se guarda en la variable opcion mediante la función scanf().

Después, el programa utiliza un switch-case entre las líneas 31 y 100 para realizar diferentes operaciones dependiendo de la opción que el usuario haya seleccionado.

Entre las líneas 32 y 45: Si el usuario selecciona la opción 1, se le pide que ingrese dos números enteros y se realiza la suma. El resultado se almacena en una variable resultado de tipo flotante.

Entre las líneas 47 y 60: Si el usuario selecciona la opción 2, se le pide que ingrese dos números enteros y se realiza la resta. El resultado también se almacena en la variable resultado.

Entre las líneas 62 y 75: Si el usuario selecciona la opción 3, se le pide que ingrese dos números enteros y se realiza la multiplicación. El resultado se almacena en la variable resultado.

Entre las líneas 77 y 95: Si el usuario selecciona la opción 4, se le pide que ingrese dos números enteros y se realiza la división. El resultado se almacena en la variable resultado. Si el segundo número es igual a cero, se imprime un mensaje de error indicando que no se puede dividir por cero. En caso contrario, se realiza la división normalmente.

Entre las líneas 97 y 99: Si el usuario selecciona la opción 0, la variable repetir se establece en FALSE y el bucle do-while se detiene.

Si el usuario selecciona una opción que no está en el menú, el programa simplemente ignora la opción y muestra el menú de nuevo.

Finalmente, el programa devuelve el valor 0 (línea 103) , indicando que la ejecución del programa ha terminado correctamente.

Es importante destacar que este programa utiliza estructuras de control básicas como “if” , “switch” y “do-while”. Además, el uso de macros para declarar constantes mediante “define” ayuda a mantener un código más limpio y legible (Aunque se recomienda usar const para definir constantes en C++ en lugar de la macro define, esto no es discusión de este artículo por lo que podría quedar para más adelante).

Para desarrollar programas más complejos que incluyan menús de opciones en C++, se puede utilizar el ejemplo de esta entrada como punto de partida. Sin embargo, en el blog tengo otros post que tratan sobre tipos de menús que podrías revisar:

4 plantillas de menú de opciones en C++

En esta publicación te voy a mostrar algunas plantillas básicas para crear menús de opciones en lenguaje C++ los cuales podrás estudiarlos y adecuarlos para tus propias necesidades: proyectos de programación, tareas, ejercicios, exámenes, prácticas calificadas, proyectos propios, etc. 

En cada menú de opciones verás que estarán presentes los siguientes tipos de estructuras de control:

También te mostraré otros menús más elaborados en donde te enseñaré a incluir submenús. Por ahora te voy adelantando que para lograr ello vamos a tener que apoyarnos en el uso de funciones (programación modular).

Si lo que buscas es aprender a hacer menús de opciones en lenguaje C o en Pseint (no en C++) te recomiendo revisar los siguientes enlaces:

Si te interesa saber cómo crear un menú de opciones en C++ en el que puedas seleccionar las opciones usando las teclas direccionales (u otro tipo de teclas) esta entrada te puede ser muy útil: Menú de opciones con teclas direccionales.

1. Menú de opciones: Estructura básica

Casi todos los menús de opciones en C++ presentarán las siguientes partes: 

  1. Título del menú: Se refiere al título descriptivo del menú.
  2. Opciones: Son las distintas opciones enumeradas del menú. Nunca debe faltar la opción que permita SALIR.
  3. Entrada del usuario: Esta es la parte donde se le pide al usuario que ingrese por teclado la opción del menú que desea que se ejecute.

Ejemplo: 

Título: Menu de opciones

Opciones:

  • Opcion 1
  • Opcion 2
  • Opcion 3
  • Opcion 4
  • SALIR

Texto: “Ingrese una opcion“. Inmediatamente después de imprimir este texto, se realiza la lectura de lo que el usuario haya elegido.

menú de opciones

Código fuente de la plantilla básica

Antes de mostrar el código fuente de la plantilla, es importante que identifiques cada uno de los elementos que se utiliza en la creación de un menú de opciones básico:

  • Declaración de variables
  • Estructura repetitiva do-while
  • Lectura y escritura en pantalla
  • Estructura de selección múltiple switch

Estos elementos los veremos muy a menudo en este tipo de aplicaciones.

				
					// Plantilla de un Menú de Opciones

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    int opcion;
    bool repetir = true;
    
    do {
        system("cls");
        
        // Texto del menú que se verá cada vez
        cout << "\n\nMenu de Opciones" << endl;
        cout << "1. Opcion 1" << endl;
        cout << "2. Opcion 2" << endl;
        cout << "3. Opcion 3" << endl;
        cout << "4. Opcion 4" << endl;
        cout << "0. SALIR" << endl;
        
        cout << "\nIngrese una opcion: ";
        cin >> opcion;
        
        switch (opcion) {
            case 1:
                // Lista de instrucciones de la opción 1                
                
                system("pause>nul"); // Pausa
                break;
                
            case 2:
                // Lista de instrucciones de la opción 2                
                
                system("pause>nul"); // Pausa
                break;
                
            case 3:
                // Lista de instrucciones de la opción 3                
                
                system("pause>nul"); // Pausa            
                break;
                
            case 4:
                // Lista de instrucciones de la opción 4                
                
                system("pause>nul"); // Pausa                
                break;
            
            case 0:
            	repetir = false;
            	break;
        }        
    } while (repetir);
	 
    return 0;
}
view raw
				
			

2. Menú de opciones de operaciones matemáticas básicas

Para esta parte vamos a poner en práctica la realización de un menú de opciones en donde para cada opción se realice una operación matemática básica (opción 1: sumar, opción 2: restar, opción 3: multiplicar, opción 4: dividir y opción 5: salir).

Para ello contamos con la siguiente estructura:

Título: Menu de opciones

Opciones:

    1. Sumar dos números
    2. Restart dos números
    3. Multiplicar dos números
    4. Dividir dos números
    5. SALIR

Texto para pedir ingreso por teclado de la opción deseada: “Ingrese una opcion”.

Inmediatamente después de pedir al usuario que ingrese la opción deseada, se realiza la lectura de la opción la cual es almacenada en una variable entera.

En esta plantilla se están usando algunos caracteres especiales para darle una mejor presentación al menú de opciones. Estos caracteres especiales se llaman secuencias de escape y son una combinación del caracter back slash “\” con alguna letra.

Las secuencias de escape que más utilizaremos en nuestros programas son los siguientes:

\t: Tabulador horizontal

\n: Salto de línea

Código fuente

				
					// Plantilla de un Menú de Opciones

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    int opcion;
    bool repetir = true;
    
    do {
        system("cls");
        
        // Texto del menú que se verá cada vez
        cout << "\n\n\t\t\tMenu de Opciones" << endl;
        cout << "\t\t\t----------------" << endl;
        cout << "\n\t1. Sumar dos numeros" << endl;
        cout << "\t2. Restar dos numeros" << endl;
        cout << "\t3. Multiplicar dos numeros" << endl;
        cout << "\t4. Dividir dos numeros" << endl;
        cout << "\t0. SALIR" << endl;
        
        cout << "\n\tIngrese una opcion: ";
        cin >> opcion;
        
        int numero1, numero2;
		float resultado;
        switch (opcion) {
            case 1:
                // Instrucciones para sumar dos números
                cout << "\n\tIngrese primer numero: ";
                cin >> numero1;
                
                cout << "\tIngrese segundo numero: ";
                cin >> numero2;
                
                cout << "\t---------------------------" << endl;
                resultado = numero1 + numero2;
                cout << "\tResultado: " << resultado << endl;
                
                system("pause>nul");
                break;
                
            case 2:
                // Instrucciones para restar dos números
                cout << "\n\tIngrese primer numero: ";
                cin >> numero1;
                
                cout << "\tIngrese segundo numero: ";
                cin >> numero2;
                
                cout << "\t---------------------------" << endl;
                resultado = numero1 - numero2;
                cout << "\tResultado: " << resultado << endl;
                
                system("pause>nul");
                break;
                
            case 3:
                // Instrucciones para multiplicar dos números
                cout << "\n\tIngrese primer numero: ";
                cin >> numero1;
                
                cout << "\tIngrese segundo numero: ";
                cin >> numero2;
                
                cout << "\t---------------------------" << endl;
                resultado = numero1 * numero2;
                cout << "\tResultado: " << resultado << endl;
                
                system("pause>nul");
                break;
                
            case 4:
                // Instrucciones para dividir dos números
                cout << "\n\tIngrese primer numero: ";
                cin >> numero1;
                
                cout << "\tIngrese segundo numero: ";
                cin >> numero2;
                
                cout << "\t---------------------------" << endl;
                
                if (numero2 == 0) {
                	cout << "\tResultado: No se puede dividir por cero." << endl; 
		} else {
			resultado = numero1 / (numero2 * 1.0);
			cout << "\tResultado: " << resultado << endl;
		}
                
                system("pause>nul");     
                break;
            
            case 0:
            	repetir = false;
            	break;
        }        
    } while (repetir);
	 
    return 0;
}
				
			

3. Menú de opciones usando funciones (programación modular)

Este ejemplo es un poco más elaborado. Se empieza a dividir el código en otros módulos o funciones cuyo tipo de retorno es void. Esto permite separar la lógica entera del programa en subprogramas más pequeños.

Código fuente

				
					// Plantilla de un Menú de Opciones

#include <iostream>
#include <cstdlib>

using namespace std;

// Prototipos de las funciones
void sumar();
void restar();
void multiplicar();
void dividir();

int main()
{
    int opcion;
    bool repetir = true;

    do
    {
        system("cls");

        // Texto del menú que se verá cada vez
        cout << "\n\n\t\t\tMenu de Opciones" << endl;
        cout << "\t\t\t----------------" << endl;
        cout << "\n\t1. Sumar dos numeros" << endl;
        cout << "\t2. Restar dos numeros" << endl;
        cout << "\t3. Multiplicar dos numeros" << endl;
        cout << "\t4. Dividir dos numeros" << endl;
        cout << "\t0. SALIR" << endl;

        cout << "\n\tIngrese una opcion: ";
        cin >> opcion;

        int numero1, numero2;
        float resultado;
        switch (opcion)
        {
        case 1:
            sumar();
            break;

        case 2:
            restar();
            break;

        case 3:
            multiplicar();
            break;

        case 4:
            dividir();
            break;

        case 0:
            repetir = false;
            break;
        }
    } while (repetir);

    return 0;
}

// Definiciones de las funciones
void sumar()
{
    int numero1, numero2;
    float resultado;

    cout << "\n\tIngrese primer numero: ";
    cin >> numero1;

    cout << "\tIngrese segundo numero: ";
    cin >> numero2;

    cout << "\t---------------------------" << endl;
    resultado = numero1 + numero2;
    cout << "\tResultado: " << resultado << endl;

    system("pause>nul");
}

void restar()
{
    int numero1, numero2;
    float resultado;

    cout << "\n\tIngrese primer numero: ";
    cin >> numero1;

    cout << "\tIngrese segundo numero: ";
    cin >> numero2;

    cout << "\t---------------------------" << endl;
    resultado = numero1 - numero2;
    cout << "\tResultado: " << resultado << endl;

    system("pause>nul");
}

void multiplicar()
{
    int numero1, numero2;
    float resultado;

    cout << "\n\tIngrese primer numero: ";
    cin >> numero1;

    cout << "\tIngrese segundo numero: ";
    cin >> numero2;

    cout << "\t---------------------------" << endl;
    resultado = numero1 * numero2;
    cout << "\tResultado: " << resultado << endl;

    system("pause>nul");
}

void dividir()
{
    int numero1, numero2;
    float resultado;

    cout << "\n\tIngrese primer numero: ";
    cin >> numero1;

    cout << "\tIngrese segundo numero: ";
    cin >> numero2;

    cout << "\t---------------------------" << endl;

    if (numero2 == 0)
    {
        cout << "\tResultado: No se puede dividir por cero." << endl;
    }
    else
    {
        resultado = numero1 / (numero2 * 1.0);
        cout << "\tResultado: " << resultado << endl;
    }

    system("pause>nul");
}
				
			

4. Menú de opciones con submenús usando funciones

En este momento tenemos un menú de opciones más elaborado. Se utilizan funciones para el menú principal, los submenus y las operaciones de cada una de las opciones de los menús. Además se puede ir navegar avanzando y retrocediendo por todas las opciones.

Código fuente

				
					// Plantilla de un Menú de Opciones

#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

// Prototipos de las funciones
void menuPrincipal();
void menuOperacionesBasicas();
void menuOperacionesVariadas();

// Funciones del submenú Operaciones básicas
void sumar();
void restar();
void multiplicar();
void dividir();

// Funciones del submenú Operaciones variadas
void numeroDia();
void sumaPrimerosNumeros();
void factorial();
void invertirNumero4Cifras();

int main()
{
    menuPrincipal();
    return 0;
}

void menuPrincipal()
{
    int opcion;
    bool repetir = true;

    do
    {
        system("cls");

        cout << "\n\n\t\t\tMENU PRINCIPAL" << endl;
        cout << "\t\t\t--------------" << endl;
        cout << "\n\t1. Operaciones basicas" << endl;
        cout << "\t2. Operaciones variadas" << endl;
        cout << "\t0. SALIR" << endl;

        cout << "\n\tIngrese una opcion: ";
        cin >> opcion;

        switch (opcion)
        {
        case 1:
            menuOperacionesBasicas();
            break;

        case 2:
            menuOperacionesVariadas();
            break;

        case 0:
            repetir = false;
            break;
        }
    } while (repetir);
}

// Definiciones de las funciones

void menuOperacionesBasicas()
{
    int opcion;
    bool repetir = true;

    do
    {
        system("cls");

        cout << "\n\n\t\t\tMENU OPERACIONES BASICAS" << endl;
        cout << "\t\t\t------------------------" << endl;
        cout << "\n\t1. Sumar" << endl;
        cout << "\t2. Restar" << endl;
        cout << "\t3. Multiplicar" << endl;
        cout << "\t4. Dividir" << endl;
        cout << "\t0. REGRESAR" << endl;

        cout << "\n\tIngrese una opcion: ";
        cin >> opcion;

        switch (opcion)
        {
        case 1:
            sumar();
            break;

        case 2:
            restar();
            break;

        case 3:
            multiplicar();
            break;

        case 4:
            dividir();
            break;

        case 0:
            repetir = false;
            break;
        }
    } while (repetir);
}

void menuOperacionesVariadas()
{
    int opcion;
    bool repetir = true;

    do
    {
        system("cls");

        cout << "\n\n\t\t\tMENU OPERACIONES VARIADAS" << endl;
        cout << "\t\t\t-------------------------" << endl;
        cout << "\n\t1. Numero y dia" << endl;
        cout << "\t2. Suma de los primeros n numeros naturales" << endl;
        cout << "\t3. Factorial de un numero" << endl;
        cout << "\t4. Invertir un numero de 4 cifras" << endl;
        cout << "\t0. REGRESAR" << endl;

        cout << "\n\tIngrese una opcion: ";
        cin >> opcion;

        switch (opcion)
        {
        case 1:
            numeroDia();
            break;

        case 2:
            sumaPrimerosNumeros();
            break;

        case 3:
            factorial();
            break;

        case 4:
            invertirNumero4Cifras();
            break;

        case 0:
            repetir = false;
            break;
        }
    } while (repetir);
}

void sumar()
{
    system("cls");
    
    int numero1, numero2;
    float resultado;

	cout << "\n\tSUMA DE DOS NUMEROS";
    cout << "\n\t===================\n";

    cout << "\n\tIngrese primer numero: ";
    cin >> numero1;

    cout << "\tIngrese segundo numero: ";
    cin >> numero2;

    cout << "\t---------------------------" << endl;
    resultado = numero1 + numero2;
    cout << "\tResultado: " << resultado << endl;

    system("pause>nul");
}

void restar()
{
    system("cls");
    
    int numero1, numero2;
    float resultado;

    cout << "\n\tRESTA DE DOS NUMEROS";
    cout << "\n\t====================\n";

    cout << "\n\tIngrese primer numero: ";
    cin >> numero1;

    cout << "\tIngrese segundo numero: ";
    cin >> numero2;

    cout << "\t---------------------------" << endl;
    resultado = numero1 - numero2;
    cout << "\tResultado: " << resultado << endl;

    system("pause>nul");
}

void multiplicar()
{
    system("cls");
    
    int numero1, numero2;
    float resultado;

    cout << "\n\tPRODUCTO DE DOS NUMEROS";
    cout << "\n\t=======================\n";

    cout << "\n\tIngrese primer numero: ";
    cin >> numero1;

    cout << "\tIngrese segundo numero: ";
    cin >> numero2;

    cout << "\t---------------------------" << endl;
    resultado = numero1 * numero2;
    cout << "\tResultado: " << resultado << endl;

    system("pause>nul");
}

void dividir()
{
    system("cls");
    
    int numero1, numero2;
    float resultado;

    cout << "\n\tCOCIENTE DE DOS NUMEROS";
    cout << "\n\t========================\n";

    cout << "\n\tIngrese primer numero: ";
    cin >> numero1;

    cout << "\tIngrese segundo numero: ";
    cin >> numero2;

    cout << "\t---------------------------" << endl;

    if (numero2 == 0)
    {
        cout << "\tResultado: No se puede dividir por cero." << endl;
    }
    else
    {
        resultado = numero1 / (numero2 * 1.0);
        cout << "\tResultado: " << resultado << endl;
    }

    system("pause>nul");
}

void numeroDia()
{
    system("cls");

    cout << "\n\tCONVIERTE NUMERO A DIA";
    cout << "\n\t======================\n";

    int dia;
    cout << "\tIngrese el numero de dia: ";
    cin >> dia; // 1, 2, 3, 5, 6, 7

    switch (dia) // En caso de que la variable DIA tome el valor:
    {
    case 1:
        cout << "\tLunes" << endl;
        break;

    case 2:
        cout << "\tMartes" << endl;
        break;

    case 3:
        cout << "\tMiercoles" << endl;
        break;

    case 4:
        cout << "\tJueves" << endl;
        break;

    case 5:
        cout << "\tViernes" << endl;
        break;

    case 6:
        cout << "\tSabado" << endl;
        break;

    case 7:
        cout << "\tDomingo" << endl;
        break;
    }

    system("pause>nul");
}

void sumaPrimerosNumeros()
{
    system("cls");

    int n;
    int suma;

    cout << "\n\tSUMA DE LOS PRIMEROS N NUMEROS";
    cout << "\n\t==============================\n";

    cout << "\tIngrese numero n: ";
    cin >> n;

    suma = n * (n + 1) / 2;

    cout << "\tLa suma de los primeros n numeros es = " << suma << endl;

    system("pause>nul");
}

void factorial()
{
    system("cls");

    int numero, i;
    float factorial;

    cout << "\n\tFACTORIAL DE UN NUMERO";
    cout << "\n\t======================\n";

    cout << "\tIngrese el numero: ";
    cin >> numero;

    factorial = 1;
    for (i = 1; i <= numero; i++)
    {
        factorial = factorial * i;
    }

    cout << "\t" << numero << "! = " << factorial << endl;

    system("pause>nul");
}

void invertirNumero4Cifras()
{
    system("cls");

    int nume;
    int u, d, c, um;
    int a, b;
    int resultado;

    cout << "\n\tINVERTIR NUMERO DE 4 CIFRAS";
    cout << "\n\t===========================\n";

    cout << "\n\tIngrese un numero de cuatro cifras: ";
    cin >> nume; // 1234

    um = nume / 1000; // 1
    a = nume / 100;   // 12
    c = a % 10;       // 2
    b = nume / 10;    // 123
    d = b % 10;       // 3
    u = nume % 10;    // 4
    resultado = u * 1000 + d * 100 + c * 10 + um;

    cout << "\t" << u << " " << d << " " << c << " " << um << endl;
    cout << "\tEl numero invertido es: " << resultado << endl;

    system("pause>nul");
}
				
			

Pueden encontrar las plantillas de menú de opciones en lenguaje C en la siguiente entrada: https://algoritmosyalgomas.com/plantilla-de-un-menu-de-opciones-en-lenguaje-ansi-c/