Verificar si el ingreso de teclado es un entero o decimal |
|
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
|