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

Control de errores en C

Estas en el tema de Control de errores en C en el foro de C/C++ en Foros del Web. Hola a todos, Me gustaría saber como hacer un control de errores "absurdos", por ejemplo que el programa pida la edad al usuario y este ...
  #1 (permalink)  
Antiguo 04/03/2008, 08:00
 
Fecha de Ingreso: julio-2006
Mensajes: 7
Antigüedad: 17 años, 10 meses
Puntos: 0
Control de errores en C

Hola a todos,

Me gustaría saber como hacer un control de errores "absurdos", por ejemplo que el programa pida la edad al usuario y este introduzca una letra:

#include <stdio.h>

int edad = 0;

main (){
printf("¿Qué edad tienes?\n");
scanf("%i",&edad);
}

Muchas gracias y un saludo
  #2 (permalink)  
Antiguo 04/03/2008, 08:18
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Control de errores en C

El método más eficiente es tratar de evitarlo. En ese caso lee en una cadena de caracteres y valida el número.

En terminos generales valida que la información sea correcta antes de realizar alguna operación con ella, siempre te vas a encontrar con algún caso extraño que no tengas contemplado. La mayoría de las funciones en C te retornan un valor indicando "que pasó" cuando se ejecutó la función.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #3 (permalink)  
Antiguo 04/03/2008, 08:27
 
Fecha de Ingreso: julio-2006
Mensajes: 7
Antigüedad: 17 años, 10 meses
Puntos: 0
Re: Control de errores en C

Gracias por contestar. No te he entendido bien a lo que te refieres. Que lea la edad como si fuera una cadena de caracteres?


Saludos
  #4 (permalink)  
Antiguo 04/03/2008, 09:05
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Control de errores en C

Si:

Código:
#include <stdio.h>

int edad = 0;
int retorno;
char buffer[20];
int main (int nargs, char **args){
printf("¿Qué edad tienes?\n");
fgets(buffer, 20, stdin);
retorno = funcion_que_valida_y_convierte_a_entero(&edad, buffer);
if(retorno == ERROR)
  printf("Has cometido un error bla bla bla");
else
   printf("Tu edad es %d", edad);
return 0;
}
Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #5 (permalink)  
Antiguo 04/03/2008, 13:20
 
Fecha de Ingreso: julio-2006
Mensajes: 7
Antigüedad: 17 años, 10 meses
Puntos: 0
Re: Control de errores en C

pero que es lo que contendría la funcion que valida y convierte a entero??


Gracias.
  #6 (permalink)  
Antiguo 05/03/2008, 02:30
Avatar de define  
Fecha de Ingreso: enero-2008
Mensajes: 100
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Control de errores en C

pues un char, por ejemplo a, cuando lo almacenas en una cadena de caracteres, este pasa a ser un valor numerico, su valor asckii, asi que, simplemente comprueba que no este dentro de ese rango, es decir, del rango de aA-zZ, nose si me he explicado bien... espero haberte servido de ayuda.
  #7 (permalink)  
Antiguo 05/03/2008, 07:09
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Control de errores en C

Cita:
Iniciado por Sodiete Ver Mensaje
pero que es lo que contendría la funcion que valida y convierte a entero??


Gracias.
Esa parte te toca a ti, define ya te dio una orientación (con algunos errores) pero es un punto de partida:

Cita:
pues un char, por ejemplo a, cuando lo almacenas en una cadena de caracteres, este pasa a ser un valor numerico, su valor asckii, asi que, simplemente comprueba que no este dentro de ese rango, es decir, del rango de aA-zZ, nose si me he explicado bien... espero haberte servido de ayuda.
ASCII...un arreglo de char más bien, es decir un "string".

@Sodiete debes aplicar el psudoalgoritmo que te comento define para cada uno de los caracteres del string o arreglo de char.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
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 04:35.