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

[SOLUCIONADO] código de validación

Estas en el tema de código de validación en el foro de C/C++ en Foros del Web. la cosa es que encontre este metodo de validacion de numeros acá en buscando en los foros, pero pasa que cuando se ingresa un valor ...
  #1 (permalink)  
Antiguo 15/03/2015, 11:39
Avatar de Cardo2095  
Fecha de Ingreso: marzo-2015
Ubicación: En mi casa
Mensajes: 18
Antigüedad: 9 años, 1 mes
Puntos: 0
Busqueda código de validación

la cosa es que encontre este metodo de validacion de numeros acá en buscando en los foros, pero pasa que cuando se ingresa un valor incorrecto el cursor se mueve y además me gustaria que cuando detecte el error de un mensaje de error y limpie la pantalla. y si es posible quisiera un método igual pero que valide las letras


Código C++:
Ver original
  1. int getInt(){
  2.     static char buf[BUFSIZ];
  3.     char *endPtr = 0;
  4.     int n;
  5.     do{
  6.        if(endPtr != 0)printf("\a");
  7.        fgets(buf, BUFSIZ, stdin);
  8.        n = strtol(buf, &endPtr, 10);
  9.        
  10.     }
  11.     while(buf[0] == '\n' || *endPtr != '\n');
  12.     return n;
  13. }
  14.  
  15.  
  16. int main() {
  17.     printf("Ingresa un entero:\n");
  18.     int n = getInt();
  19.    cout<<"Ingresaste:"<<n<<endl;
  20.     system("pause");
  21.     return 0;
  22. }
  #2 (permalink)  
Antiguo 15/03/2015, 13:35
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: código de validación

yo no sé :)

Última edición por lareto; 15/03/2015 a las 14:44
  #3 (permalink)  
Antiguo 16/03/2015, 04:51
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: código de validación

primero, esa funcion tiene algunas lagunas. ¿Que pasa si la cadena es mayor que el valor maximo o minimo permitidos para un long? Segun la ayuda dice que la funcion strtol retornará el valor maximo o minimo permitidos con lo que no avisa de que algo salio mal. ¿Y si metes caracteres no numericos? retorna 0 con lo que tu funcion saldria diciendo que el valor es 0. ¿Y que pasa si realmente has introducido 0? Es mucho mejor un condicional que vaya controlando caracter por caracter usando isdigit o comprobando que no sea menor que 0 ni mayor que 9 y que uses sprintf para la conversion ya que este retorna el numero de caracteres convertidos y es mas facil saber si falló. Para el caso de letras otro condicional y listo.
  #4 (permalink)  
Antiguo 16/03/2015, 05:39
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: código de validación

Cita:
Iniciado por Cardo2095 Ver Mensaje
la cosa es que encontre este metodo de validacion de numeros acá en buscando en los foros
¿Entiendes cómo funciona ese código? Si no es así, empiezas mal. No sirve de nada buscar código y usarlo sin entenderlo... simplemente no aprendes nada.

Cita:
Iniciado por Cardo2095 Ver Mensaje
pero pasa que cuando se ingresa un valor incorrecto el cursor se mueve
Es el comportamiento que tiene por defecto la consola. No es algo que puedas modificar usando las funciones estándar. Otra cosa es que empieces a enviar caracteres específicos del sistema operativo... pero es otro cantar.

Cita:
Iniciado por Cardo2095 Ver Mensaje
y además me gustaria que cuando detecte el error de un mensaje de error y limpie la pantalla.
Mostrar un mensaje de error lo puedes conseguir con -std::cout >> "Tu error aqui"- y limpiar la pantalla... bueno, siempre puedes recurrir a la función "system". Eso sí, si quieres más detalles mira la documentación al respecto, te vendrá bien para ir cogiendo nivel... no va a ser todo copiar y pegar.

Un saludo.

Última edición por eferion; 16/03/2015 a las 05:53
  #5 (permalink)  
Antiguo 16/03/2015, 22:30
Avatar de Cardo2095  
Fecha de Ingreso: marzo-2015
Ubicación: En mi casa
Mensajes: 18
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: código de validación

Gracias gente ahí iré intentando :3

Etiquetas: c++, metodos
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 03:45.