Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Manejo de Excepciones

Estas en el tema de Manejo de Excepciones en el foro de C/C++ en Foros del Web. Agradeceria si resolvieran la siguiente duda: Intentando comprender el Tema "Manejo de excepciones" , he realizado el siguiente codigo: Cita: #include <iostream> using namespace std; ...
  #1 (permalink)  
Antiguo 25/10/2008, 14:36
 
Fecha de Ingreso: julio-2008
Mensajes: 18
Antigüedad: 15 años, 9 meses
Puntos: 0
Manejo de Excepciones

Agradeceria si resolvieran la siguiente duda:

Intentando comprender el Tema "Manejo de excepciones", he realizado el siguiente codigo:


Cita:
#include <iostream>

using namespace std;

int main() {

int a;
int x;

try{

for(a=5; a>= 0; a--){

x = 100/a;

cout<< x <<endl;
}}

catch(int c){

cout<<"Division entre cero"<<endl;
}
}
En espera que al llegar a la operaciòn entre cero, se genere una excepcion y aparezca el mensaje "Division entre cero". Sin embargo, esto no sucede solamente aparece 20, 25, 33, 50, 100 y despues aparecer un cuadro que dice:

"<nombre del programa> ha detectado un problema y debe cerrarse". Es decir, si se da el error por la division entre cero, pero no se genera lo que yo espero, que es la frase del "catch".

¿Talvez debo incluir la palabra "throw"?, si es asi, a donde se debe colocar. He probado colocandola asi:

throw x = 100/a;

Y efectivamente me genera la frase: "Division entre cero", pero no realiza los calculos anteriores.

Me parece, entonces, que no he comprendido correctamente el Tema, podria alguien porfavor explicar como se pude lograr que anta la division entre cero se publique la frase: "Division entre cero"

Gracias por la ayuda.
  #2 (permalink)  
Antiguo 25/10/2008, 17:06
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Manejo de Excepciones

El codigo es logicamente correcto pero esa excepcion no existe como tal en C++ asi que no la podes capturar con un try/catch normalmente. Hay una forma de hacerlo con VC++ pero no es standard, para habilitar la extension tenes que ir a las propiedades del proyecto:

Configuration Properties>>C/C++>>Code Generation
Enable C++ Exceptions=Yes With SEH Exceptions (/EHa).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 26/10/2008, 13:16
 
Fecha de Ingreso: julio-2008
Mensajes: 18
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Manejo de Excepciones

Eternal Idol, gracias por la respuesta y perdon por esta nueva pregunta que podria resultar el colmo de la estupidez, pero las siguientes lineas que mencionas:

"Configuration Properties>>C/C++>>Code Generation
Enable C++ Exceptions=Yes With SEH Exceptions (/EHa)".

....deberian estar en el menù del programa C++?, es decir, deberia estar en la linea de:

File Edit View Insert.........etc?

Por que alli no lo encuentro.....

Gracias.
  #4 (permalink)  
Antiguo 26/10/2008, 13:43
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Manejo de Excepciones

Primero Project>>Properties y despues segui lo anterior.

Tiene que estar seleccionado el proyecto, para eso abri el Solution Explorer (View>>Solution Explorer) y seleccionalo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 01/11/2008, 15:56
 
Fecha de Ingreso: julio-2008
Mensajes: 18
Antigüedad: 15 años, 9 meses
Puntos: 0
Manejo de Excepciones

Gracias Eternal_Idol por la ayuda.

Una pregunta-peticion mas, sobre el Tema "Orden en la captura de excepciones", podrian, porfavor, explicar como funciona este orden en la captura, de una manera facil de compreder.

Por ejemplo, con "orden de captura" ¿se refieren al orden en que se usan los "catch" de una excepciòn?

Pero, ¿es que acaso el "catch" que se urilizara no esta determinado por el tipo de dato que es lanzado, es decir, si es "int" o "char" y no por su posicion en el codigo?

Agradeceria cualquiera explicaciòn, y que se consideren que antes de preguntar he hecho el esfuerzo de entender, por medio de lecturas, sin ningùn exito. Por ello espero que ahora con palabras mas "humanas" pueda comprender este complicado tema.

La lectura principal que mantengo es del Tutorial:

http://www.conclase.net/c/curso/index.php?cap=043b

Gracias por la ayuda.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:07.