Validar un entero

Quería preguntar si me puedes ayudar con un problemita, no se mucho de C y necesito validar que cuando pido un numero por pantalla, este sea realmente un numero y no acepte otra cosa que no sea numero

3 Respuestas

Respuesta
1
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");
if (num[0]=='-' && i==1)
num[--i] = 0;
else
num[i++] = 0;
if (i > 0)
return num;
else
return NULL;
}
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=='-' && i==0) {
num[i++] = ch;
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_
Respuesta
1
Puedes mirarte esta página. Aquí hay un ejemplo que hace uso de la función isdigit() para hacer la validación
http://programacion.com/foros/29/msg/16094/
Venga, suerte y un saludo
®Aguin ©
Te agradezco mucho la ayuda, pero ya solucione el problema, de todas maneras revisare la página ya que no es el único problema que puedo tener..
Respuesta
1
Existe una función en C con el prototipo
int isdigit(char)
Que devuelve un entero distinto de cero si el carácter a analizar es un dígito (entre 0 y 9) y cero si no lo es.
En una cadena, analizaríamos los caracteres uno a uno (usando indexación o aritmética de punteros).
Un pequeño ejemplo:
char *num;
gets(num);
while(*num) {
if (isdigit(*num)) printf("BIEN");
else printf("ERROR");
num++; }
No sé si es esto lo que pides. Para lo que quieras, aquí estoy.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas