2017-09-21 4 views
0

J'écris un programme en C qui est censé renvoyer la valeur flottante 3.2058 après l'appel de la fonction averagerOfFiveFloats. Le problème est lorsque le code compile et l'EDI ouvre le fichier exécutable, la valeur renvoyée est 1067450368. Pourquoi cela se produit-il? J'ai vérifié que les types de variables étaient corrects et que les deux fonctions avaient un type de retour float.Le programme Nombre Averager renvoie une valeur flottante incorrecte

Le programme prend cinq valeurs flottantes dans la fonction principale, puis la fonction function averagerOfFiveFloats est appelée dans la fonction principale. La fonction averagerOfFiveFloats prend les cinq valeurs flottantes, les ajoute ensemble, divise le total par 5, puis renvoie la valeur. (J'utilise l'IDE Code :: Blocks).

Voici mon code:

#include <stdio.h> 

float a, b, c, d, e; 

float averagerOfFiveFloats(float num1, float num2, float num3, float num4, 
float num5); 

float main (void) { 

    a = 1.25; 

    b = 4.45; 

    c = 3.45; 

    d = 1.11; 

    e = 5.769; 

    return averagerOfFiveFloats(a, b, c, d, e); 

} 


float averagerOfFiveFloats(float num1, float num2, float num3, float num4, 
float num5) { 

    float addition = 0; 

    addition = num1 + num2 + num3 + num4 + num5; 

    float divider = 0; 

    divider = addition/5; 

    return divider; 


} 
+1

type de retour de '' main' est de int'. – BLUEPIXY

Répondre

1

Le problème avec votre code est que vous tentez de retourner un float de main. La fonction principale ne peut renvoyer qu'un int.

Au lieu de cela, vous pouvez imprimer votre résultat en tant que

printf("%f", averagerOfFiveFloats(a, b, c, d, e)); 

et qui produit le résultat correct.

En outre, la moyenne réelle de vos nombres ne peut pas être 16.029 car tous les nombres sont inférieurs à cela.

1

main doit renvoyer un int et non un flottant. Vous obtenez probablement un avertissement pour cela pendant la compilation. Les avertissements sont généralement des erreurs en C, vous devriez donc vous efforcer d'avoir un code d'avertissement gratuit.

Ainsi, ce que vous voyez est que votre float est silencieusement convertie en int. Si vous faites printf("%f", averageOfFive(a, b, c, d, e)), vous verrez la sortie que vous attendez.

1

Voici le bon code! vous ne pouvez pas retourner un flotteur principal :)

J'ai aussi changé la syntaxe, il est plus facile à lire/comprendre :)

#include <stdio.h> 

float averagerOfFiveFloats(float num1, float num2, float num3, float num4, 
          float num5) { 
    float addition = 0; 
    float divider = 0; 

    addition = num1 + num2 + num3 + num4 + num5; 
    divider = addition/5; 

    return divider; 

} 

int  main (void) { 

    float a = 1.25; 
    float b = 4.45; 
    float c = 3.45; 
    float d = 1.11; 
    float e = 5.769; 

    float divider = averagerOfFiveFloats(a, b, c, d, e); 
    printf("divider = %f\n", divider); 
    return (0); 
}