C/Visual C - Porfa, una aclaración

 
Vista:
sin imagen de perfil

Porfa, una aclaración

Publicado por Edwin (70 intervenciones) el 15/11/2006 22:42:52
Hola a todos.

Miren nunca e suado try catch, pero segun e leido en el bolque try se introduce el codigo en donde puede haber error, y si hay error se ejecuta el codigo que está en el catch, estoy seguro que es así(segun leí).

Bueno este es en ejemplo de java:

try{
numerador=Integer.parseInt(str1);
denominador=Integer.parseInt(str2);
cociente=numerador/denominador;
respuesta=String.valueOf(cociente);
}catch(NumberFormatException ex){
respuesta="Se han introducido caracteres no numéricos";
}

Segun veo en el "catch(NumberFormatException ex)" en "NumberFormatException ex" es una constante del catch, en este caso es una constante cuando el ingreso de datos es incorrecto. Tambien se puede hacer catch anidados, supongo que este codigo en Visual c++ 6.0 es algo similar, excepto "NumberFormatException", donde puedo encontrar el listado de estás constantes en internet, otra forma que me dijo Fernando.Gomez es hacerlo con la funcion GetLastError(), intente usarla, algo así por ejemplo:

int a,c;
scanf("%d",&a);
c = 5/a;
if (GetLastError())
{ printf ("error");}
else{
printf("%d",c)
}

Uhmmm, como no me sale,jajajaja, estoy seguro que estoy haciendo mal el uso de esa función.

Por favor una aclaración, se los suplico ok.

Gracias de Antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Porfa, una aclaración

Publicado por fernando.gomez (1603 intervenciones) el 15/11/2006 23:40:26
Nonononononono, GetLastError es para preguntarle a Windows cuál ha sido el último error. Pero tú quieres manejar excepciones.

Primero, eso de "NumberFormatException ex" no es una constante. En ese lugar pones una variable con su tipo de dato, y si la excepción coincide con ese tipo de dato, entonces ahí entrará a manejar error. Ejemplo:

try
{
throw (int)0; //lanza una excepción de tipo número entero
}
catch (double d) {
// nunca entra aquí porque la excepción es de tipo int, no double
}
catch (int i) {
//aquí si entra porque el tipo de la excepción coincide
}
catch (...) {
// atrapa cualquier excepción, pero no llega aquí porque el catch anterior maneja
// la excepción
}

Es decir, puedes poner varios catch's seguidos. También puedes poner uno general para cuando no te esperas un tipo de dato en particular, como se ve en el último caso.

Con respecto a la anidación, se puede, pero recuerda que un catch solo puede ser usado si hay un try. Así, tendrías que anidar los dos:

try
{
// hacer algo
try
{
//otra cosa
}
catch (...)
{
//manejar error interno
}
// seguir haciendo algo
}
catch (...)
{
// manejar alguna otra excepción
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar