Programacion con c++: Control de errores con el bucle do-while

En el artículo anterior os estuve hablando del bucle do-while, este bucle es de una gran importancia para muchos programas y funciones, sobre todo ayuda mucho a la creación de menús interactivos. En este artículo os voy a mostrar cómo podemos realizar un control de los datos introducidos por el usuario y como podemos hacer que nuestro programa responda bien a errores. Si consigues realizar el ejercicio que te pondré en este artículo ya estarás en una fase muy avanzada de la programación.

Para este artículo os he preparado un vídeo que os muestra toda la información sobre el control de errores a la hora de realizar un menú. También el vídeo os propone un ejercicio. Mira el vídeo dos o tres veces y después lee el ejercicio propuesto que te especificaré a continuación:

El ejercicio propuesto es el siguiente:
Realiza un programa que simule una calculadora, esta deberá tener las siguientes características:

  1. Deberá aparecer un menú inicial que te de la opción de sumar, restar, multiplicar y dividir y una opción de salir que deberá de ser con la tecla escape.
  2. Cuando el usuario pulse en cada una de las opciones el programa le tendrá que dar la opción de introducir los números a sumar, restar, multiplicar o dividir. Deberá de sacar el resultado por pantalla y a continuación volver a poner el menú inicial.
  3. Solo se podrá salir de la aplicación pulsando la tecla escape del teclado.

Espero que este vídeo te haya servido y que te pongas en acción y realices este ejercicio que te propongo. Si piensas y repasas seguro que no lo ves muy complicado.

Me gustaría que me dejaras cualquier comentario, quiero saber que te ha parecido este artículo y las dificultades a la hora de resolver el ejercicio.

Un saludo,

Javi Pizarro

Acerca de Javi Pizarro

Ingeniero informático dedicado a la docencia, con experiencia en creación de programas de gestión y desarrollo de aplicaciones web.
Esta entrada fue publicada en Programacion y etiquetada , , , , , , , , , , , , . Guarda el enlace permanente.

20 respuestas a Programacion con c++: Control de errores con el bucle do-while

  1. redcash dijo:

    hola, he conseguido casi hacer la calculadora pero tengo un problema que no se resolver y no lo entiendo solo me suma y no entiendo el por que.
    Te pongo mi codigo haber si me das una pista de donde estoy fallando.

    #include
    #include

    using namespace std;

    int main(){
    double num1,num2,suma,resta,mul,div;
    char option;

    cout<< "Introduce el primer valor "<>num1;
    cout<<" Introduce el segundo valor "<>num2;
    cout<<"\n";

    do{
    cout<<" Introduce el valor de la opreacion "<<endl;
    cout<<" 1- Suma \n";
    cout<<" 2- Resta \n";
    cout<<" 3- Multiplicacion \n";
    cout<<" 4- Division \n";
    cout<>option;
    cout<<"\n";
    }while (option!=49 && option!=50 && option!=51 && option!=52 && option!=27);

    if(option==option!=49){
    suma=num1+num2;
    cout<<"La Suma es de : "<<suma;
    }
    else{
    if(option==option!=50){
    resta=num1-num2;
    cout<<" La Resta es de : "<<resta;
    }
    else{
    if(option == option!=51){
    mul=num1*num2;
    cout<<"La Multiplicacion es de :"<<mul;
    }
    else{
    if(option == option!=52){
    num2==0;
    cout<<"Error, no es posible dividir entre 0.\n";
    div=num1/num2;
    cout<<"La Division es de :"<<div;
    }
    }
    }
    }

    getch();
    }

    un saludo y gracias por tu ayuda.

    • Javi Pizarro dijo:

      hola redcash,
      Mira bien cuando haces cout si tienes los cin para recoger del teclado el dato.
      Mira el cin de la variable opcion, ese es importante. Veo que en vez de un cin tienes un cout. Corrigelo.
      En los if no pones bien la condición. En opcion tienes un dato guardado ( según lo que ha pulsado el usuario) compruebalo con if(opcion==49) no como lo has puesto tu que es algo raro.
      Corrige los fallos y comentame si te ha ido bien, y si sigues con dudas sigue preguntandome por aquí.

      Un saludo

  2. redcash dijo:

    si vamos a ver los cin los tengo bien puestos pero no se por que cuando copio y pego y se publica en el blog se cambian muchas cosas del codigo.
    Bueno los cin los tengo bien y los if ya los he cambiado pero me sigue haciendo solo la suma, yo tecleo el dos por ejemplo para que me haga la resta y el resultado que me muestra por pantalla es : La suma es: y la respuesta ccorrecta a la suma pero ni resta ni multiplica ni divide y no se porque???..

    un saludo y gracias.

  3. redcash dijo:

    ok vale ya esta arreglado gracias

  4. PANCHITO dijo:

    Hola javi, ya tengo mi calculadora, pero como le hacemos para que al presionar ESC se acabe el programa?
    he intentado usar:

    if(opcion==27)
    cout<<"adios";

    aparte de que no se la expresion para terminar el programa, ni aun asi sale la palabra adios, parece que no me captura la tecla esc.
    Gracias

    • Javi Pizarro dijo:

      Buenas Panchito,
      prueba a poner la opción salida en la condición del bucle while, me explico, haz que salga por pantalla las 4 operaciones y pon como opción 5 la de esc. para salir y, en la condición del while incluyes if(opcion!=27 && opcion!=….). haz la prueba a ver si así te sale. Si es así compártelo con todos nosotros, si no, aquí me tienes para lo que haga falta.

      Un saludo

  5. PANCHITO dijo:

    Despues de pensarlo detenidamente, me di cuenta que en la condicion de while estaba poniendo:

    while (opcion!=49 || opcion!=50 || opcion!=51 || opcion!=52 || opcion!=27);

    lo que seria:
    Mientras la opcion no sea 49 o 50 o 51 o 52 o 27, hacer «el menu de opciones»

    Con esto, si seleccionaba ESC se repetia el bucle ya que ESC si es igual a 27 (con esto saldria del bucle), pero no es igual a 49 ni 50 ni 51 ni 52, con esto no podia salir del bucle nunca.

    Y se me ocurrio ver si funcionaba con una coma, asi se separaria la condicion :
    «49 o 50 o 51 o 52» de la condicion «27», y funcionó.

    Aunque siguio sin captar la tecla ESC, solo la capta con su remplazo, que es ^[
    Bueno aqui esta mi calculadora.
    Como la ves Javi? Saludos
    _____________

    #include <iostream>
    #include <conio.h>
    #include <string.h>

    using namespace std;

    int main(){
    double num1,num2;
    char opcion;

    do{
    cout<<«\nCALCULADORA. Elige la operacion que deseas realizar\n\n»;
    cout<<«(1) = Suma»<<endl;
    cout<<«(2) = Resta»<<endl;
    cout<<«(3) = Division»<<endl;
    cout<<«(4) = Multipicacion»<<endl;
    cout<<«\nCTRL + { = Salir»<<endl;
    cout<<«\n Opcion: «;
    cin>>opcion;

    if(opcion!=49&&opcion!=50&&opcion!=51&&opcion!=52&&opcion!=27)
    cout<<«\nElige una opcion valida.»;

    if(opcion==49){

    cout<<«\nSUMA\nInserte el valor del numero 1: «;
    cin>>num1;
    cout<<«Inserte el valor del numero 2: «;
    cin>>num2;
    cout<<«\n El resultado es: «<<num1+num2<<endl;
    }

    if(opcion==50){

    cout<<«\nRESTA\nInserte el valor del numero 1: «;
    cin>>num1;
    cout<<«Inserte el valor del numero 2: «;
    cin>>num2;
    cout<<«\n El resultado es: «<<num1-num2<<endl;
    }

    if(opcion==51){

    cout<<«\nDIVISION\nInserte el valor del numero 1: «;
    cin>>num1;
    if(num1==0)
    cout<<«\nERROR. No es posible dividir entre 0.\n»;

    else {
    cout<<«Inserte el valor del numero 2: «;
    cin>>num2;
    if(num2==0)
    cout<<«ERROR. No es posible dividir entre 0.\n»;
    else
    cout<<«\n El resultado es: «<<num1/num2<<endl;
    }
    }

    if(opcion==52){

    cout<<«\nMULTIPLICACION\nInserte el valor del numero 1: «;
    cin>>num1;
    cout<<«Inserte el valor del numero 2: «;
    cin>>num2;
    cout<<«\n El resultado es: «<<num1*num2<<endl;
    }

    if(opcion==27){
    //salir del bucle
    }

    }
    while(opcion!=49||opcion!=50||opcion!=51||opcion!=52 , opcion!=27);

    cout<<«Hasta luego, presiona cualquier tecla para salir «; // este mensaje solo sale fuera del bucle

    getch();
    }

    ____________
    SOLO ALGO MAS, PARA LAS DEMAS PERSONAS QUE PUBLICAN SU CODIGO FUENTE.
    Para poder publicar correctamente un codigo fuente, hay que remplazar todos los
    < por "& l t ;" (sin los espacios entre letras ni comillas) y todos los
    > por "& g t ;" (sin los espacios entre letras ni comillas)

    y ya se podra visualizar esas etiquetas prohibidas por wordpress

    • Javi Pizarro dijo:

      Muy buenas Panchito, tu solución está muy bien. Estoy muy contento con los avances que estas obteniendo, también veo que estas buscando información sobre c++ y esforzandote mucho, enhorabuena.

    • Daniel hdez dijo:

      Hola al igual que tu tambien termine mi codigo pero me pasaba lo mismo de la tecla «esc» gracias a ti lo solucione, te muestro como quedo mi codigo es muy parecido al tuyo:

      #include
      #include
      #include

      using namespace std;

      int main ()
      {
      char opcion;
      int num1;
      int num2;
      int suma;
      int resta;
      int multi;
      int divi;

      do
      {
      cout<<"\nElije una opcion: \n";
      cout<<"1.- Suma\n";
      cout<<"2.- Resta\n";
      cout<<"3.- Multiplicacion\n";
      cout<<"4.- Division\n";
      cout<>opcion;
      if(opcion==49)
      {
      cout<>num1;
      cout<>num2;
      suma=num1+num2;
      cout<<"El resultado de la suma es:\n"<<suma;
      }
      else if(opcion==50)
      {
      cout<>num1;
      cout<>num2;
      resta=num1-num2;
      cout<<"\nEl resultado de la esta es:\n"<<resta;
      }
      else if(opcion==51)
      {
      cout<>num1;
      cout<>num2;
      multi=num1*num2;
      cout<<"\nEl resultado de la multiplicacion es:\n"<<multi;
      }
      else if(opcion==52)
      {
      cout<>num1;
      cout<>num2;
      if((num1%num2)==0)
      {
      divi=num1/num2;
      cout<<"El resultado de la division es:\n"<<divi;
      }
      else
      {
      cout<<"Solo acepto divisiones entre numeros enteros\n";
      }
      }
      else if(opcion==27)
      {
      //Fin del ciclo
      }
      }while (opcion!=49||opcion!=50||opcion!=51||opcion!=52,opcion!=27);
      cout<<"\nAdios..";
      getch ();
      }

      • Daniel hdez dijo:

        lo siento por alguna razon no se copio el codigo

        #include
        #include
        #include

        using namespace std;

        int main ()
        {
        char opcion;
        int num1;
        int num2;
        int suma;
        int resta;
        int multi;
        int divi;

        do
        {
        cout<<"\nElije una opcion: \n";
        cout<<"1.- Suma\n";
        cout<<"2.- Resta\n";
        cout<<"3.- Multiplicacion\n";
        cout<<"4.- Division\n";
        cout<>opcion;
        if(opcion==49)
        {
        cout<>num1;
        cout<>num2;
        suma=num1+num2;
        cout<<"El resultado de la suma es:\n"<<suma;
        }
        else if(opcion==50)
        {
        cout<>num1;
        cout<>num2;
        resta=num1-num2;
        cout<<"\nEl resultado de la resta es:\n"<<resta;
        }
        else if(opcion==51)
        {
        cout<>num1;
        cout<>num2;
        multi=num1*num2;
        cout<<"\nEl resultado de la multiplicacion es:\n"<<multi;
        }
        else if(opcion==52)
        {
        cout<>num1;
        cout<>num2;
        if((num1%num2)==0)
        {
        divi=num1/num2;
        cout<<"El resultado de la division es:\n"<<divi;
        }
        else
        {
        cout<<"Solo acepto divisiones entre numeros enteros\n";
        }
        }
        else if(opcion==27)
        {
        //Fin del ciclo
        }
        }while (opcion!=49||opcion!=50||opcion!=51||opcion!=52,opcion!=27);
        cout<<"\nAdios..";
        getch ();
        }

  6. redcash dijo:

    Hola javi !

    He estado practicando la salida con lo de la tecla esc y no lo consigo de ninguna de las maneras, ya molesto me dio por probar a poner otra tecla, en este caso utilice «!» para salir del bucle y me funciona a la perfeccion con el mismo codigo solo cambiando el munero que en este caso es el 33 y ahora si que me funciona sale del bucle me dice adios «como le tengo pouesto yo» y pulsando una tecla se cierra ¡Estupendo..!. Pero mi pregunta es ¿Por que diantres no funciona con la tecla esc?

    Un saludo y gracias

    • Javi Pizarro dijo:

      Buenas redcash,
      cuando propuse el ejercicio me acorde que yo programe algo parecido con la tecla esc para la facultad, en este caso lo dije pero no lo comprobé. A raiz de este comentario lo he probado y me pasa lo que a ti, no se cual es la explicación aunque veo que al pulsar la tecla esc no se produce ningún carácter en el simbolo del sistema, por tanto creo que la variable no obtiene ningún valor (o valor aleatorio). Voy a seguir investigando para responder tu duda. Por ahora en vez de salir con esc programa la salida del bucle con otra tecla ok?
      Un saludo y espero poder resolver la duda pronto o que alguien que nos visite nos saque de dudas. Me encanta aprender enseñando 😉

  7. redcash dijo:

    Por cierto panchito he encontrado otra manera de publicar en wordpress nuestro codigo
    solo hay que poner en la cabecera en este caso el lenguaje seria «cpp» osea que quedaria asi seguido del codigo.

  8. PANCHITO dijo:

    Hey muy buena opcion , resulta mas facilito que mi metodo! Gracias

    #include <iostream>
    #include <conio.h>
    cout<<
    cin>>
    getch();
    
  9. redcash dijo:

    no hay por que darlas para eso estamos aqui para aprender ayudandonos todos.

  10. Daniel hdez dijo:

    otra vez no se copio el codigo bien me imagino que lo tengo que tipear para que se vea bien….

  11. raul galvez cachairo dijo:

    wenas antes de nada a todo el mundo
    hola javi mira no e sido capaz de usar el boton de ESC se que el valor es 27 pero cuando compilo el programa el boton de ESC no funcion
    ¿puede ser mi ordenador o teclado?
    ¿como podtria controlarlo
    gracias DEWW
    gracias

  12. raul galvez cachairo dijo:

    XDDD
    perdon javi no ace falta respuesta , leiendo me e dado cuenta que a todos nos pasa lo mismo ,menos mal pensaba que me tenia k comprar otro teclado o pc.
    SORRY por las molestias.

  13. Daniela dijo:

    HOLA MUY BUEN VIDEO!!
    TENGO UNA DUDA, ME PRODUCE UN ERROR AL CORRER EL PROGRAMA.
    Me repite el mensaje dos veces, cuando pido que introduzca las opciones, se repite dos veces. que puedo hacer 😦 ya lo he intentado todo. Intente limpiando pantalla pero nada.

Replica a Daniel hdez Cancelar la respuesta