Para lograrlo, hay que leer carácter por carácter, como se vayan ingresando, y desechar los que no sean ni dígitos ni punto (¿porque supongo que también quieres punto decimal no?), e irlos guardando, hasta que se ingresa el enter. A continuación te doy un ejemplo que hice. La función GetNum() que incluye el programa la puedes usar igual que la gets(), pero en este caso solo te permitirá dígitos y punto en la entrada (solo un punto decimal eh!). Espero que te sirva, trabaja en la consola de MS-DOS, si la estás usando en un programa de Ventanas no va a funcionar. #include <stdio.h> #include <conio.h> #include <ctype.h> char *GetNum(char *num); int main(void) { char num[100]; printf("introduzca el valor : "); GetNum(num); printf("el valor es : %s\n", num); return 0; } char *GetNum(char *num) { char ch; int i; int hasPoint; i = 0; hasPoint = 0; do { ch = getch(); if (ch == 13) { printf("\n"); num[i++] = 0; return num; } else if (isdigit(ch)) { num[i++] = ch; printf("%c", ch); } else if (ch=='.' && !hasPoint) { num[i++] = ch; hasPoint = 1; printf("%c", ch); } else if (ch == 8) { if (i > 0) { printf("%c %c", ch, ch); i--; if (num == '.') hasPoint = 0; } } } while (1); } PD: cuando hace la comparaión de if (ch == 8), se refiere a si el carácter ingresado es el de retroceso. Rober_
Debes validar los datos, cada vez que introduces un dato debe estar almacenado en una variable tipo string o carácter, después validas cada uno de los caracteres para que su valor en ascii sea dentro del rango de los números es decir dentron de 48 y el 57, si no esta dentro del parámetro pues no lo aceptas, después para usarlos solo lo conviertes en integer o entero con numero=atoi(variable)