Vérification de C si l’entrée (float) est purement un entier ou float

Je veux vérifier si la saisie de l’utilisateur est purement un entier ou un float. J’ai essayé de le faire en utilisant floor et ceilf et en comparant les valeurs à la valeur x d’origine d’une fonction. Cependant, cela semble être un peu problématique car la fonction retourne toujours 0 au lieu de 1 pour certains nombres comme 5.5, lorsque floor(5.5)!=5.5 et ceilf(5.5)!=5.5 . Ceci est mon code:

 #include  #include  #include  #include  #include  int intchecker(float x)//in a separate file { if (floor(x)==x && ceilf(x)==x) { //printf("%f",floor(x)); return 0; } else { return 1; } } int main() { char line[] = " +----+----+----+----+----+----+----+----+----+----+---+"; char numbers[] = " 0 5 10 15 20 25 30 35 40 45 50"; float balls,slots; int slot[9]; printf("==========================================================\nGalton Box Simulation Machine\n==========================================================\n"); printf("Enter the number of balls [5-100]: "); scanf("%f",& balls); if (balls>100 || balls<5){ printf("/nInput is not within the range. Please try again."); } else if (intchecker(balls)==1){ printf("/nInput is not an integer. Please try again."); } else { printf(" This is an integer."); //some more code here } } 

J’ai essayé de ne placer que le code intchecker dans un autre projet, ce qui semble bien fonctionner sans aucun bogue, contrairement au projet précédent, où, lorsque j’utilisais une instruction printf pour vérifier si la valeur de floor(x) était correcte, il continuait d’afficher des réponses différentes. , par exemple “-2.000000” lorsque l’entrée était 5.2. Ceci est mon code pour le deuxième projet:

 #include  #include  #include int main() { float x; scanf("%f",&x); if (floor(x)==x && ceilf(x)==x){ printf("Integer"); return 0; } else { printf("Non-Integer"); return 1; } } 

Comment est-il possible que le second code fonctionne parfaitement alors que le premier code ne fonctionne pas? Quelque chose ne va pas dans ma façon d’écrire / appeler la fonction? (Je suis relativement nouveau dans les fonctions – seulement 2 semaines d’exposition à ce jour)

J’ai cherché en ligne et j’ai vu beaucoup de réponses pour vérifier si l’entrée est un entier ou un float, même sur stackoverflow.com, mais mon souhait n’est pas de trouver d’autres moyens de vérifier si l’entrée est un entier ou un float (car si je voulais le faire , Je pourrais me contenter de google, et il y a beaucoup de telles questions sur stackoverflow.com également), mais pour comprendre pourquoi mon premier code ne fonctionne pas, car, autant que je sache, il devrait bien fonctionner sans aucun des bugs. il fait actuellement face.

Toute aide est grandement appréciée!:)

En supposant une déclaration de fonction manquante:

main.c manque le prototype pour int intchecker(float x) donc main.c suppose que le prototype int intchecker(int x) et le code présentent un comportement indéfini. Tout peut arriver.

Ajoutez un prototype dans main.c ou mettez-le dans separat.h et incluez ce fichier d’en-tête ici et dans separ.c

 #include  #include  #include  #include  #include  int intchecker(float x); int main(void) { ...