lunes, 29 de septiembre de 2008

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

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

4 comentarios:

  1. no por que isdigit() recibe como argumento un int.

    cuando 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.

    ResponderEliminar
  2. Hola!

    Bueno, 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... ;)

    ResponderEliminar