Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: theluigy13etv en 26 Junio 2011, 08:44 am



Título: Ayuda en la validación de entrada de datos en C++
Publicado por: theluigy13etv en 26 Junio 2011, 08:44 am
Hola a todos, me alegro de haber encontrado este sitio web...veo que acá podemos compartir información..recien estoy aprendiendo a usar el C++, en particular uso el compilador Borland C++ 5.02 y tengo el siguiente problema:

Cuando realizo un programa en donde me permita ingresar solo números enteros desde 1 hasta el 100 utilizo las funciones gotoxy y clreol juntas para poder lograr con mi cometido de tal forma que si ingreso algun numero que no se encuentre en el intervalo [ 1 ; 100 ] el programe se estanque hasta que ingrese un valor válido. El código es el siguiente:

# include <string.h>
# include <conio.h>
# include <iostream.h>
# include <stdio.h>
# include <stdlib.h>
# define l 100

// ********************************************************************
int main()
{
char resp;
system("color 1e");
short int n;
gotoxy(15,5); cout<<"DATOS DE ALUMNOS";
gotoxy(15,6); cout<<"----------------";
gotoxy(5,8); cout<<"_______________________________________________";
do{
gotoxy(10,10); cout<<"Ingrese numero de alumnos a ingresar: ";
clreol(); system("color 1e"); cin>>n;
}while(100<n || n<1);
getche();
}

// ********************************************************************

El problema :-[ está cuando ingreso texto, parece que ocurre un bucle infinito y no sé cuál es la razón y como poder arreglarlo, yo sé que sería ilógico ingresar texto cuando el programa me solicita el ingreso de un número, pero quiero hacer un programa eficiente que cuando ingrese algo que no me pidan o cuando por error presione alguna tecla que no corresponda, el programa responda de la forma adecuada indicando que estoy ingresando mal los datos y que ingrese correctamente....Espero respuestas....Muchas gracias

Aaaa.. >:D..además me pregunto si es posible realizar lo anterior, pero sin usar gotoxy ni clreol pero usando las funciones de la librería estándar  :rolleyes:-


Título: Re: Ayuda en la validación de entrada de datos en C++
Publicado por: Therue en 27 Junio 2011, 23:08 pm
Hola segun el condicional que has puesto en el while,estas leyendo numeros hasta que se introduzca un numero menor que 1 o un numero mayor que 100.
Si quieres que un intervalo sea cerrado debes poner AND por ejemplo
(n>=1 && n<=100).Un saludo espero te sirva.


Título: Re: Ayuda en la validación de entrada de datos en C++
Publicado por: theluigy13etv en 28 Junio 2011, 14:11 pm
 :D Gracias por contestarme...mmm...creo que no me dejé entender...lo que quiero en esa parte del código es que el programa solo acepte valores desde 1 hasta 100...de tal forma que si ingreso 0 (0<1)  o 123 (123>100)  en cualquiera de los dos casos el programa borre dicha linea y se vuelva e ejecutar la misma instrucción de lectura hasta que ingrese el número correcto...Bueno creo que eso si lo hice más o menos bien...el problema está cuando ingreso alguna palabra o texto...el programa lo lee pero se "cuelga" como si se estuviera produciendo un bucle infinito...Espero más aportes...muchísimas gracias


Título: Re: Ayuda en la validación de entrada de datos en C++
Publicado por: Queta en 28 Junio 2011, 15:41 pm
Primeramente, déjame decirte de nuevo que tienes el bucle mal. El esquema y la intención son muy buenos pero lo tienes que hacer tal y como Therue mencionó. Pégale un repaso a los operadores de C/C++:

http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B (http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B)

Finalmente, para comprobar si has introducido un número o una cadena, puedes usar la función atoi (http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/ (http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/)). Te dejo un pequeño código para que lo entiendas mejor:

Código
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4.  
  5. int main()
  6. {
  7. char string[50];
  8.  
  9. fgets(string, 50, stdin);
  10.  
  11. if(string[strlen(string) - 1] == '\n')
  12. string[strlen(string) - 1] = '\0';
  13.  
  14. int integer = atoi(string);
  15.  
  16. if(integer == 0)
  17. {
  18. printf("\n");
  19.  
  20. main();
  21. }
  22.  
  23. else
  24. printf("%d", integer);
  25.  
  26. //O lo que sea
  27.  
  28. getchar();
  29.  
  30. return 0;
  31. }


PD: ¿No te da errores tu código? ¿Qué compilador estás usando?


Título: Re: Ayuda en la validación de entrada de datos en C++
Publicado por: theluigy13etv en 29 Junio 2011, 17:28 pm
Uso el Borland C++ 5.02 ..  :(


Título: Re: Ayuda en la validación de entrada de datos en C++
Publicado por: leogtz en 29 Junio 2011, 18:04 pm
Uso el Borland C++ 5.02 ..  :(

Utiliza otro, el que utilizas está obsoleto.


Título: Re: Ayuda en la validación de entrada de datos en C++
Publicado por: theluigy13etv en 30 Junio 2011, 06:14 am
Sí gracias por el comentario...gustoso lo haría pero en el lugar en donde estoy llevando el curso nos exigen a usar este compilador...y debemos de hacerlo...aunque luego que termine el curso...usaré el Dev o algún otro que sea libre.  XD


Título: Re: Ayuda en la validación de entrada de datos en C++
Publicado por: leogtz en 30 Junio 2011, 06:51 am
Entiendo, pues menuda persona el que los hace que usen ese compilador, habiendo muchisimos mejores, en fin, saludos.