Verificar si el ingreso de teclado es un entero o decimal Imprimir
Escrito por adrianvaca   
Martes, 22 de Marzo de 2011 23:54

Lo que se hace es leer el ingreso de teclado sobre una cadena, la analizas y si tiene la estructura de un entero lo puedes convertir a entero con la función atoi. Si tiene la estructura de un decimal lo puedes convertir a float usando la función atof.

La siguiente función permite saber si una cadena es entero:

int es_entero(char *cadena)
{
   int i, valor;


   for(i=0; i < strlen(cadena); i++)
   {
      valor = cadena[ i ] - '0';

      if(valor < 0 || valor > 9)
      {
          if(i==0 && valor==-3) continue;

          return 0;
      }
   }
   return 1;
}



La siguiente función permite saber si una cadena es un decimal:

int es_decimal(char *cadena)
{
   int i, valor;
   int tiene_punto = 0;


   for(i=0; i < strlen(cadena); i++)
   {
      valor = cadena[ i ] - '0';

      if(valor < 0 || valor > 9)
      {
          /* El primer caracter es: - */
         if(i==0 && valor==-3) continue;

         /* Verifica que solo tenga un: . */
         if(valor==-2 && !tiene_punto)
         { 
            tiene_punto=1;
            continue;
         }

         return 0;
      }
   }
   return 1;
}



Ahora para pruebas podemos tener un main como sigue:

void main()
{
   char cadena[ 6 ];

   gets(cadena);

   if(es_entero(cadena))
     printf("Es entero, valor: %d", atoi(cadena));
   else if(es_decimal(cadena))
     printf("Es decimal, valor: %lf", atof(cadena));
   else
     printf("No es un numero");
}



Las funciones atoi, atof están definidas en stdlib.h.
La función strlen en string.h.
Desde luego hay que usar también stdio.h

 
Otros artículos