[C con Clase] Tratamiento de errores??

Steven Davidson steven en conclase.net
Mar Mar 6 01:28:24 CET 2007


Hola Reinel,

El pasado 2007-03-05 19:55:31, Rey escribió:

R> Buenas tardes amigos míos.
R> Estoy viendo lo referente al tratamiento de excepciones, y tengo una duda, ejemplificaré para intentar hacerme entender:
R>  
R> Supongamos que tengo un bloque de código que asigna dos valores enteros a variables enteras también. En el mismo tengo un control de excepciones, para cuando el valor sea por ejemplo mayor que 65535 me lance una excepción con el mensaje "Valores fuera de rango"
R> En mi programa principal escribo un bloque try, en donde llamo al bloque que ejecuta el código que asigna esos valores. Si los valores que paso como parámetro, alguno no cumple la condición se lanzará la excepción. La controlaré y listo. Ahora bien. si yo quiero que el programa vuelva de nuevo (luego de que el usuario corrija los valores de entrada) a ejecutarse en el inicio del bloque try ¿Es posible hacer eso? O tendré que buscar otra manera de volver a intentar correr mi bloque de código de asignación inicial e intentar el tratamiento de errores de otra manera. Me pueden ayudar.
R>  

Bien. Antes de contestar, tenemos que matizar sobre el tema. Las excepciones sirven para tratar casos excepcionales, como seguramente sabes. Esto significa que cualquier posible error sea una excepción. En tu caso, un error por parte del usuario no es una excepción. Un ejemplo de una excepción es por ejemplo la posibilidad de que al manipular un fichero se provoque un error, como puede ser al leer o al escribir datos; debería funcionar, pero puede darse el caso de que no.

En general, una excpeción es un error incontrolado, inesperado, e improbable, pero posible. Para que el programa no provoque errores de ejecución con el sistema operativo, nuestro propio programa puede tratar de corregir el estado del programa en lugar del comportamiento normal de terminar inmediatamente. Otros errores, que pueden ser provocados por el usuario introduciendo una letra en lugar de un número, no son excepciones, ya que el programa sí debería esperar tal comportamiento erróneo y por tanto puede verificar tales errores.

Si estás haciendo un programa a modo de prueba, entonces bien está; es un ejemplo al fin y al cabo. Según nos cuentas, tienes el bloque 'try/catch' en 'main()'. Entonces, puedes escribir el bucle 'do/while' y usar una variable booleana para controlar tal bucle. Por ejemplo,

bool bRepetir = false;

do
{
  try
  {
    // Hacer algo que provoque una excepción
    ...
    bRepetir = false;
  } catch( excepcion &e )
  {
    // Hacer algo aquí
    bRepetir = true;
  }
} while( bRepetir );

Si se provoca la excepción, entonces modificamos 'bRepetir', si no, entonces 'bRepetir' será falso.

Como ya he mencionado, no usaríamos excepciones para este caso, ya que no e suna excepción, sino un error esperado y corregible por parte del usuario, que obviamente tu programa debería verificar y corregir si es necesario.


Espero que esto te ayude.

Steven


Más información sobre la lista de distribución Cconclase