El uso de interfaces de usuario (incluyendo las más primitivas) generó la necesidad de presentar la información en forma de menús de opciones, de forma que se pudiera seleccionar una opción a partir de un panel de opciones disponibles agrupadas de forma lógica. Por ejemplo, si desarrollamos un programa para conversión de unidades, podríamos estructurarlo por varios criterios, por ejemplo, primero podríamos ofrecer 3 opciones en un “menú” general, a) Sistema internacional, b) Sistema inglés y 3) Salir. Si elegimos la opción a), entonces deberemos poner por ejemplo i) Conversión de unidades de longitud, ii) Conversión de unidades de masa y iii) Regresar a menú principal.
Como puedes intuir, el uso de los “menús” le darán a tu programa coherencia y sobre todo, permitirán dirigir al usuario para interactuar de forma eficiente y práctica con tu programa indicándole el camino que “deben seguir” cuando utilicen el mismo.
La estructura switch nos permite evaluar una condición, la cual puede ser una entrada del usuario o una condición dada por un proceso del programa, y de acuerdo a esta evaluación, se ejecutarán un conjunto de instrucciones.
La sintaxis de la estructura switch es,
switch (expresión) case expresión-constante : sentencia(s) [default : sentencia(s)]
en donde,
El siguiente programa implementa un menú primitivo, para que te familiarices con la construcción de estructuras switch.
// cpp_40_switch01.cpp // Este programa forma parte del tutorial de introducción al lenguaje C++ // http://a.ehack.info/leguaje-c-introduccion/ // Se ilustra la estructura switch // 2018, Por http://about.me/carlosgbr // Versión 1 // Compilado en https://www.onlinegdb.com/online_c++_compiler #include <iostream> using namespace std; int main() { int a, b, total; int seleccion; cout<<"Bienvenid@, este programa realizará operaciones aritméticas" << endl; cout<<"sobre 2 cantidades que escribas" << endl << endl; cout<<"Escribe el primer número: "; cin>>a; cout <<"Escribe el segundo número: "; cin>>b; cout<<endl<<"Indica el número de la operación que desees realizar: " <<endl; cout<<"(1) Suma" << endl; cout<<"(2) Resta" << endl; cout<<"(3) Producto" << endl; cout<<"(4) División Entera" << endl; cout<<"(5) Módulo" << endl; cin>>seleccion; //Para realizar la operación solicitada utilizamos una estructura switch //Intencionalmente se ha omitido el uso de break; switch (seleccion) { case 1: cout << "La suma es: " << a + b << endl; case 2: cout << "La resta es: " << a - b << endl; case 3: cout << "El producto es: " << a * b << endl; case 4: cout << "La división es: " << a / b << endl; case 5: cout << "El módulo es: " << a % b << endl; default: cout << "Opción no válida" << endl; } //Fin de switch cout<<"Gracias por utilizar este programa" << endl; return 0; }
Ejecuta varias veces el programa, y selecciona distintas operaciones, notarás que si seleccionas, por ejemplo, la opción “3”, el programa realizará también las operaciones “4,” y “5”, si eliges la opción “1”, realizará todas las operaciones, incluso mostrará la sentencia default, el cual se utiliza para los casos de selecciones no válidas. Naturalmente no es deseable esta situación, si usamos un menú de opciones es para utilizar únicamente la opción que deseamos, no la que deseamos y todas las que siguen. A continuación puedes ver una salida del programa.
El comportamiento de switch en el programa anterior deja claro que todas las instrucciones se ejecutarán de forma predeterminada, a partir de la primera comparación verdadera, por lo que debemos contar con un mecanismo que nos permita salir de forma limpia del código que nos interesa una vez que haya concluido.
Para ello C++ dispone de la sentencia break. Si existen bucles o estructuras de control anidadas, break anulará la ejecución del ciclo más interno, devolviendo el control a la siguiente estructura de control más externa, de no existir, devuelve el control al programa principal.
Para utilizar break la sintaxis es:
break;
en donde,
De este modo podemos re-arreglar nuestro programa para que una vez realizada la operación deseada, salga de la estructura switch, ignorando los demás casos considerados.
Cambia el código de la estructura switch en el primer programa por el siguiente, ejecútalo y ve la forma de comportarse. Prueba quitando sentencias break para que analices el resultado.
// cpp_41_switch02.cpp // Este programa forma parte del tutorial de introducción al lenguaje C++ // http://a.ehack.info/leguaje-c-introduccion/ // Se ilustra la estructura switch y el uso de la sentencia break para salir // 2018, Por http://about.me/carlosgbr // Versión 1 // Compilado en https://www.onlinegdb.com/online_c++_compiler #include <iostream> using namespace std; int main() { int a, b, total; int seleccion; cout<<"Bienvenid@, este programa realizará operaciones aritméticas" << endl; cout<<"sobre 2 cantidades que escribas" << endl << endl; cout<<"Escribe el primer número: "; cin>>a; cout <<"Escribe el segundo número: "; cin>>b; cout<<endl<<"Indica el número de la operación que desees realizar: " <<endl; cout<<"(1) Suma" << endl; cout<<"(2) Resta" << endl; cout<<"(3) Producto" << endl; cout<<"(4) División Entera" << endl; cout<<"(5) Módulo" << endl; cin>>seleccion; //Para realizar la operación solicitada utilizamos una estructura switch //Switch impide que se ejecuten todas las sentencias case; switch (seleccion) { case 1: cout << "La suma es: " << a + b << endl; break; case 2: { cout << "La resta es: " << a - b << endl; break; } case 3: { cout << "El producto es: " << a * b << endl; break; } case 4: { cout << "La división es: " << a / b << endl; break; } case 5: { cout << "El módulo es: " << a % b << endl; break; } default: { cout << "Opción no válida" << endl; break; } } //Fin de switch cout<<"Gracias por utilizar este programa" << endl; return 0; }
Como puedes comprobar, solo se ejecutará el código correspondiente a la opción elegida, una vez que se ejecuta break, el control del programa sale de la estructura switch.
En el código también puedes observar también:
Puedes observar que existe un problema con nuestra estructura switch: no nos permite ejecutar otro cálculo en caso que lo deseemos. Te sugiero que intentes programar esta característica, de modo que el ciclo de control termine cuando el usuario desee y no después de una ejecución como actualmente ocurre.
A continuación te presento una posible solución, además incluye otras características que te sugiero revises.
// cpp_42_switch03.cpp // Este programa forma parte del tutorial de introducción al lenguaje C++ // http://a.ehack.info/leguaje-c-introduccion/ // Se ilustra la repetición de la estructura switch hasta que el usuario // teclea un valor predeterminado, así como la comprobación de errores // 2018, Por http://about.me/carlosgbr // Versión 1 // Compilado en https://www.onlinegdb.com/online_c++_compiler #include <iostream> using namespace std; int main() { int a, b, total; int seleccion; bool terminar = false; cout<<"Bienvenid@, este programa realizará operaciones aritméticas" << endl; cout<<"sobre 2 cantidades que escribas" << endl << endl; do //garantizamos que al menos se ejecute una vez nuestro código { cout<<endl<<"Indica el número de la operación que desees realizar " <<endl; cout<<"Escribe 0 para terminar" << endl; cout<<"(1) Suma" << endl; cout<<"(2) Resta" << endl; cout<<"(3) Producto" << endl; cout<<"(4) División Entera" << endl; cout<<"(5) Módulo" << endl; cout<<"(0) Salir" << endl; cin>>seleccion; //Para realizar la operación solicitada utilizamos una estructura switch //Switch impide que se ejecuten todas las sentencias case; switch (seleccion) { case 1: cout<<"Escribe el primer número: "; cin>>a; cout <<"Escribe el segundo número: "; cin>>b; cout << "La suma es: " << a + b << endl; break; case 2: { cout<<"Escribe el primer número: "; cin>>a; cout <<"Escribe el segundo número: "; cin>>b; cout << "La resta es: " << a - b << endl; break; } case 3: { cout<<"Escribe el primer número: "; cin>>a; cout <<"Escribe el segundo número: "; cin>>b; cout << "El producto es: " << a * b << endl; break; } case 4: { bool valido = false; cout<<"Escribe el primer número: "; cin>>a; //Introducimos la comprobación de errores //Evitamos errores por división entre 0 do { cout <<"Escribe el segundo número: "; cin>>b; if (b == 0) { cout << "No puedes dividor entre 0, elige otro número" << endl; valido = false; } else { valido = true; } //if } //while while (not valido); cout << "La división es: " << a / b << endl; } case 5: { cout<<"Escribe el primer número: "; cin>>a; cout <<"Escribe el segundo número: "; cin>>b; cout << "El módulo es: " << a % b << endl; break; } case 0: { terminar = true; break; } default: { cout << "Opción no válida, vuelve a intentarlo" << endl; break; } } //Fin de switch } //fin de do while (not terminar); //Repite el ciclo hasta presionar 0 cout<<"Gracias por utilizar este programa" << endl; return 0; }El programa anterior amplía el programa original con las siguientes características:
Se pueden programar muchas tareas con switch, pero finalmente todo se reduce a un conjunto de opciones para un valor dado, ya sea una entrada del usuario o bien, un valor devuelto por un programa o rutina.
Estructura switch en C++ by Roberto C. González is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.
El comando dnsenum es una herramienta de línea de comandos para realizar enumeración de DNS…
En esta entrada te presento 24 de las listas negras más comunes que los servidores…
ZoomIt es una herramienta de anotación y zoom de pantalla para presentaciones técnicas que incluyen…
WinObj es el visor de espacios de nombres de Object Manager definitivo. Es la primera…
Whois realiza el registro de registro para el nombre de dominio o la dirección IP…
VolumeID – Esta utilidad, le permite cambiar los identificadores de los discos FAT y NTFS…