none
Try catch c++ ?? RRS feed

  • Pregunta

  • Hice un menú en c++ sencillo que consta de un while y un try catch para que una excepción se dispare si el usuario inserta una opción que no este en el menú, vale decir que estos son solo números enteros positivos mi problema es que no puedo meter el try catch dentro del while si hago eso mi programa repite infinitas veces el mensaje del try catch a que se debe esto ? Me pudieran recomendar una forma mas elegante de hacer mi menú soy novato en c++ agradecería que me den una mano gracias !

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

    int main () {

           int opcion = 0;
           try{
           while (opcion != 3) {

     cout<<"MENU GREIG\n\n"<<"1)Suma\n"<<"2)Resta\n"<<"3)Salir\n\n";
         cout<<"OPCION: ";
             scanf ("%d",&opcion);
             throw opcion;

        switch (opcion) {

      case 1:
        cout<<"Esto es la suma\n";
                break;
        case 2:
                cout<<"Esto es la resta\n";
                break;
        case 3:
                cout<<"Gracias\n";
                break;
               default:
              cout<<"No es una Opcion del Menu\n";
                break;
             }
           }
           }catch(int a){
          cout<<"Error Solo Numeros Enteros\n";
      }
            return 0;

                                                                                       
    lunes, 22 de julio de 2013 16:44

Todas las respuestas

  • El try-catch es para intentar tratar-bloquear errores inesperados-intratables. En tu caso, que el usuario teclee '4' o 'b' no es un error inesperado, ya que lo tratas directamente en el default del case, por lo tanto no debes usar try-catch para esto.

    Es más, cuando se ejecuta 'throw opción;' la ejecución salta y no se ejecuta el switch.

    Te recomiendo esta solución:

    int main () {
    
        int opcion = 0;
        while (opcion != 3) {
            cout<<"MENU GREIG\n\n"
                <<"1)Suma\n"
                <<"2)Resta\n"
                <<"3)Salir\n\n"
                <<"OPCION: ";
            cin >> opcion;
            switch (opcion) {
                case 1:
                    cout<<"Esto es la suma\n";
                    break;
                case 2:
                    cout<<"Esto es la resta\n";
                    break;
                case 3:
                    cout<<"Gracias\n";
                    break;
                default:
                    cout<<"No es una Opcion del Menu\n";
                    break;
                }
            }
        cout << "Sacabao\n";
        return 0;
        }  
    

    Observa como he reescrito el cout, es mucho más legible y obtienes el mismo resultado.

    He suprimido try-throw-catch, cambiado el scanf por cin. Si utilizas cout debes utilizar cin. Si utilizas scanf debes utilizar printf. Hay que ser coherente. Te recomiendo que utilices el par cout-cin en vez de scanf-printf más propio de C que de C++

    martes, 23 de julio de 2013 6:25
  • Ah! se me olvidaba. Si quieres utilizar el try-catch como ejercicio, deberías poner el throw dentro del default no antes de switch
    martes, 23 de julio de 2013 6:45