Otra estrategia seria capturar todos los numero como float, almacenar su parte entera, y si la parte entera es igual al numero original, entonces es un numero entero, sino, tendrá decimales.
Es decir, capturar un numero como 2.367
Almacenar su parte entera como float (2.000)
Y comprobar si (2.000==2.367)
Esto se puede hacer con las conversiones de tipo. Si pones un tipo valido de C entre parentesis delante de una expresion de otro tipo distinto, el contenido de esa expresion se convertira al tipo especificado (si es posible).
En el caso de convertir un float a int, como int no admite decimales, estos se borran.
float n = 10.6;
int x = (int) n; // x contiene el valor de n convertido al tipo int y sin decimales (10)
n = (float) x; //ahora n contiene el numero 10.0000000000...
Esta es una funcion que podrias usar:
#include
short esEntero(float n){
float parteEntera = (float)(int)n; //valor de n se convierte a int, y luego otra vez a float
return (parteEntera == n); //true si n es entero, false si es decimal.
}
main(){
float n;
scanf("%f",&n);
if(esEntero(n))
printf("%d es entero",(int)n);
else
printf("%f tiene decimales",n);
}
Y así da igual que el usuario ingrese un 2, un 2.0 ó un 6.345, como los capturas en tipo float, puedes diferenciarlos, da igual como los escriba.
Si haces tus calculos con tipos int, reconviertes el valor de las variables float con (int) y listo