Programando en C. Parte II
El sabado tuve clases de C. en el ramo de programacion, y tengo que hacer un trabajo como mi segunda catedra.
me encontre con la complicacion que no sabia como validar si un numero que me ingresaban por pantalla era un numero.
lo solucione de esta forma, aunque me imagino que debe haber mejores formas de hacerlo
defini esta function
y despues la llamo para validar, en este caso es una edad.
como podran darse cuenta edad es un char de 20, y per.edad es un int.
--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com
me encontre con la complicacion que no sabia como validar si un numero que me ingresaban por pantalla era un numero.
lo solucione de esta forma, aunque me imagino que debe haber mejores formas de hacerlo
defini esta function
int myisDigit(char cadena[]){
int i;
char letra;
for (i=0;i < strlen(cadena);i++){
letra=cadena[i];
if (letra<47 || letra>58){
return 0;
}
}
return 1;
}
y despues la llamo para validar, en este caso es una edad.
char edad[20];
do{
do{
fflush(stdin);gets(edad);
}while (myisDigit(edad)==0);
per.edad = atoi(edad);
printf ("%d",per.edad);
}while ((per.edad<0)>100));
como podran darse cuenta edad es un char de 20, y per.edad es un int.
--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com
Y no los dejaban usar isdigit()?
ResponderEliminarno por que isdigit() recibe como argumento un int.
ResponderEliminarcuando le hago un scanf o gets de Int, esta cosa almacena un numero que me imagino que es el ascii o algo parecido.
entonces isdigit, siempre me devuelve que solo son numeros.
Buen punto! :)
ResponderEliminarHola!
ResponderEliminarBueno, deberias usar isdigit(3), ya que aunque el parámetro que tiene es un int, se fuerza el char a int -- en tu caso seria isdigit((int) cadena[i]) -- y puedes usarlo sin problemas y para juegos de caracteres como UTF-8, debes usar el set de funciones estandar para wchar_t.
El otro tema que tienes que ver en tu código es evitar el uso de gets(3), ya que es por completo inseguro. En lugar de usar gets(3) para leer caracteres, es más recomendable usar el set de funciones getc(3) y getchar(3). En caso de tener acceso a una libreria de cursores -- usualmente ncurses -- puedes jugar un poco mas con la entrada.
Que estes bien... ;)