Comprobar el número entero válido

Necesito un poco de ayuda con mi progtwig para obtener un entero válido. Escribí un código que funciona bien, pero si escribo por ejemplo 453F, debería mostrar “Int inválido”, pero mi salida es 453. Parece que no comprueba el último int, pero no sé cómo hacer comprueba y muestra como entrada inválida. Aquí está mi código:

int main () { int x; getInteger(x); return 0; } int getInteger (int x) { float check; printf ("enter a integer number: \n\n"); scanf ("%f", &check); x = check; if (x == check) { printf("\nYour number is %d", x); } else { printf("\nThis is not an integer number, please insert an integer!\n\n"); } getch(); } 

Probablemente tenga que leer el valor como una cadena, y luego usar, por ejemplo, strtol para convertirlo en un entero con comprobación de errores.

Se puede hacer así:

 char str[64]; scanf("%63s", str); char *endptr; int value = (int) strtol(str, &endptr, 10); if (endptr == str) printf("Not a valid integer\n"); else if (*endptr != '\0') printf("Valid number, but followed by non-numeric data\n"); else printf("A valid number: %d\n", value); 

Su estuche con 453F como entrada causaría que la segunda cadena se imprima en el código anterior.

Bueno, así es como funciona scanf : coincidirá con lo que pueda y dejará esa F en el búfer de entrada.

Otra forma sería leer el valor de la cadena (utilizando %s especificador de formato %s ) que aceptará todos los caracteres, y luego puede usar strtof (puede encontrar muchos ejemplos de cómo usarlo) para convertirlo a la flotación con la comprobación de errores.

Puede leer como una cadena y verificar (char por char) el valor de ascii para estar en el rango correcto (48-57).