[LUG.ro Mix] Preguntita de DoWhile en C

Nicolás Aimetti lugro-mix@lugro.org.ar
Fri, 30 Jun 2006 09:37:41 +0000


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.