[LUG.ro Mix] Preguntita de DoWhile en C

Matias Sanchez lugro-mix@lugro.org.ar
Fri, 30 Jun 2006 10:22:27 -0300


Si, ya te entiendo. Algo parecico tenia pensado hacer hoy a la mañana. 
Porque ayer me fui a dormir pensado en declarar un array en lugar de un int.
Si, la verdad no es nada ligero. No hay una forma mas práctica? Tal ves es 
mas conveniente darle dos cotas al while una minima y una maxima, 
considerando que la edad no puede ser mayor que 100, pero igualmente si hago 
eso e ingreso un caracter en lugar de un dígito, se cuelga el while. Supongo 
que porque asume el valor Ascii del caracter:

main()
{
  int n;
  do {
      printf("Ingrese un número entero entre 1 y 100:\n ");
      scanf("%d", &n);
     } while(n < 1 || n > 10);
}

Saludos,

> Matias Sanchez wrote:
>>> Tengo una pregunta por ahi bastante tonta, pero realmente no puedo 
>>> hacerlo andar.
>>>
>>> Quiero validar la entrada de una variable a que sea un nro, y no seguir 
>>> hasta que se ingrese un nro (Por ejemplo, digamos una edad). Lo estoy 
>>> haciendo con Do While.
>>> Lo que pasa es que cuando guardo el dato en una variable de tipo int, y 
>>> checkeo si es digito la funcion isdigit() obviamente me retorna true, 
>>> ingrese un digito o una letra.
>>>
>>> int a;
>>> do {
>>>    printf("Ingrese edad:\n");
>>>    scanf("%d",&a);
>>>    }while(isdigit(a)= = 1);
>
> El problema ahí es el scanf("%d",&a) usado con el %d, el %d te va a 
> devolver siempre un entero. Lo que  podrias hacer es chequear el valor que 
> devuelve scanf, el mismo es igual al numero de matchs que realizo la 
> función, en cuyo caso si lo que vos le pasaste al %d no es un número el 
> numero de matchs va a ser 0.
> Otra opción es leer directamente los caracteres y despues cheuqear ahí que 
> sea un número. Sería hacer algo así:
>
>  char a[256] = "";
>  int i;
>  do {
>      printf("\nIngrese edad: ");
>      scanf("%s",a);
>      for( i=0; a[i] && isdigit(a[i]); i++) ;
>  }while( !(a[i] == '\0' || a[i] == ' ' ) );
>  printf("%d es un numero!!!\n",atoi(a));
>
> Lo cual no es lo más prelijo pero anda...
>
> Saludos,
> Nicolás.
> _______________________________________________
> Lugro-mix mailing list
> Lugro-mix@lugro.org.ar
> http://www.lugro.org.ar/mailman/listinfo/lugro-mix