Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/11/2010, 20:41
Avatar de saudakar
saudakar
 
Fecha de Ingreso: octubre-2010
Ubicación: Donde pueda beber Cafe
Mensajes: 11
Antigüedad: 14 años, 1 mes
Puntos: 5
Problemas con manejo de errores

Hola, muy buen dia

Realizo una calculadora, sencilla en cuanto a funcionalidad, sin embargo se me hace algo complicado, bueno todo va de acuerdo al nivel :).

El programa solamente debe realizar la operacion X&Y&Z donde XYZ son cualquier numero y & es cualquiera de los operadores matematicos basicos +*-/ ,... No necesariamente debe tomar en cuenta la precedencia de operadores(no se como hacerlo)

Es funcional hasta cierto punto, sin embargo cuando ingreso una operacion invalida por ejemplo:

//Este es el principal problema que no logro corregir,
**siento que ya estoy saturado**

r+3-Z, //o sea no ingreso numeros donde deben ir numeros o los signos deben ir

me salta hasta el mensaje que coloque "Realizar otra operacion? s/n: " sin embargo al presionar cualquier tecla termina la ejecucion del programa.

--Sin embargo esto no sucede cuando ingreso la operacion de la forma correcta.--


Adjunto el Codigo:
Perdon por los comentarios en el codigo, pero son la manera en la que me logro guiar con lo que voy escribiendo.
//El codigo se puede compilar con Borlan 5 sin errores ni advertencias
Código C++:
Ver original
  1. #include <iostream>
  2. #include <conio>
  3.  
  4. //Funciones a utilizar
  5. int comprobarNumero(int, int, int);
  6. char comprobarSigno(char, char);
  7. float operaciones(float, float, float);
  8.  
  9. main()
  10. {
  11.  
  12.  float n1, n2, n3, paso1, resultado;
  13.  char s1, s2, seleccion='s';
  14.  int x=0;
  15.  while (seleccion == 's')
  16.  {
  17.   n1 = 0.0;
  18.   n2 = 0.0;
  19.   n3 = 0.0;
  20.   cin.clear();
  21.   clrscr();
  22.   cout<<"ingresar la operacion de la forma X%Y%Z donde XYZ = Numero y % = operador [+-*/]"<<endl;
  23.   cin >>n1 >>s1 >>n2 >>s2 >>n3;//Asigna los valores a las variables;
  24.  
  25.   //Verificar datos numericos llamando a su respectiva funcion
  26.   if ((comprobarNumero(n1, n2, n3))&&(comprobarSigno(s1, s2)))
  27.     {
  28.      x=1;
  29.     }
  30.     else
  31.       {
  32.        cout <<"Ingresar una operacion valida"<<endl;
  33.        //goto IN;
  34.       }
  35.  
  36.   if(x==1)
  37.     {
  38.      paso1= operaciones(n1, s1, n2);
  39.      resultado = operaciones(paso1, s2, n3);
  40.      cout <<"El resultado es: " << resultado << endl<<endl;
  41.     }
  42.  
  43.      cout <<"Realizar otra operacion? s/n: ";
  44.      cin >> seleccion;
  45.    }
  46. return(1);
  47. }
  48.  
  49.  
  50.  
  51.  
  52. //Funcion para comprobar que el dato ingresado sea del tipo entero
  53. int comprobarNumero(int, int, int)
  54. {
  55.  if(cin.fail() && cin.rdstate())//Si no se ingreso un dato del mismo tipo de la variable y hay flujo de datos
  56.    {
  57.     cin.clear();//Limpiar bufer
  58.     clrscr();   //limpiar Pantalla
  59.     return(0);  //Regresar Falso
  60.    }
  61.    else
  62.      {
  63.        return(1);//Regresar Verdadero
  64.      }
  65. }
  66.  
  67. //Funcion para comprobar que se ingrese un operador valido [+,-,*,/]
  68. char comprobarSigno(char s1, char s2)
  69. {
  70.  //Compara si las variables para signos son signos de operacion +-*/
  71.  if(((s1 == '+')||(s1 == '-')||(s1 == '*')||(s1 == '/')) & ((s2 == '+')||(s2 == '-')||(s2 == '*')||(s2 == '/')))
  72.    {
  73.     return(1);
  74.    }
  75.    else //Si no son signos de operacion
  76.    {
  77.     clrscr(); //Limpiar pantalla
  78.    }
  79.    return(0);
  80. }
  81.  
  82. //Funcion que determina la operacion a realizar, en base al signo ingresado
  83. float operaciones (float n1, float signo, float n2)
  84. {
  85.  float resultado;
  86.  if(signo == '+')
  87.  {
  88.   resultado = (n1 + n2);
  89.   return(resultado);
  90.  }
  91.  
  92.   if(signo == '-')
  93.  {
  94.   resultado = (n1 - n2);
  95.   return(resultado);
  96.  }
  97.  
  98.   if(signo == '*')
  99.  {
  100.   resultado = (n1 * n2);
  101.   return(resultado);
  102.  }
  103.  
  104.   if(signo == '/')
  105.  {
  106.   resultado = (n1 / n2);
  107.   return(resultado);
  108.  }
  109.  return(0);
  110. }


Podrian brindarme alguna orientacion por favor :)
Muchas Gracias!