Je suis sur Google depuis des heures, mais sans succès.
J’utilise standard c, en appelant une méthode très simple et en renvoyant la valeur correcte, mais après le retour, la valeur est complètement fausse.
appel:
//declare the gross and ficaTax variables double gross; double ficaTax; //calculate the gross and the ficaTax gross = calcGross(payRate, hours); printf("%f\n", gross); //DELETE
Méthode:
double calcGross(double rate, double hours){ double gross; //if the person didn't work more than 40 hours if(hours <= 40.0){ gross = hours * rate; } //if the person did work more than 40 hours else{ gross = 40.0 * rate + ((hours - 40.0) * rate * 1.5); } printf("%f \t", gross); return gross; }
J’imprime les valeurs dans et hors de la méthode pour essayer de la résoudre, mais je ne peux pas le comprendre. Voici la sortie:
(correct) (incorrect, après le retour)
529.600000, -858993459.000000
1371.522500, 171798692.000000
100.000000, 0.000000
1515.710000, 171798692.000000
977.255000, 1030792150.000000
5631.360000, 687194767.000000
7502.400000, 1717986918.000000
4335.106000, 584115553.000000
1924.181500, -618475291.000000
683.084000, 137438953.000000
1348.424000, 755914245.000000
1369.200000, -858993460.000000
529.600000, -858993459.000000
4441.522500, -1030792152.000000
100.000000, 0.000000
1882.710000, 171798692.000000
Mes seules suppositions étaient que mon double post-retour était trop long pour tenir dans la longueur d’un double, mais je l’ai stocké dans un double pré-retour et il a été imprimé correctement. Si tel est le cas, je ne saurais pas comment le réparer. Mon autre hypothèse était que je l’imprimais mal après le retour, mais je l’imprimais de la même manière.
J’utilise Linux et avec le compilateur gcc si cela compte. Toute aide serait appréciée. J’essaie de résoudre ce problème apparemment simple depuis des heures.
Le problème est que vous n’avez pas fourni de déclaration ou de prototype pour la fonction calcgross()
avant son appel dans votre premier exemple.
Sans avoir vu de déclaration / prototype pour la fonction, le compilateur C supposera qu’il renvoie un int
, pas un double
, donc les choses tournent terriblement mal.
Placez la ligne suivante quelque part avant d’appeler la fonction (idéalement dans un en-tête que vous incluez):
double calcGross(double rate, double hours);
L’utilisation de l’option -Wall
compilateur vous donnerait l’avertissement suivant à ce sujet:
test.c:73:5: warning: implicit declaration of function 'calcGross' [-Wimplicit-function-declaration]
Le problème le plus probable est que vous n’avez pas déclaré calcGross
avant de l’utiliser, auquel cas le compilateur assumerait le type de retour par défaut ( int
). Essayez de placer la définition de calcGross()
avant de l’utiliser.
Silly, erreur subtile. Utilisez “printf (“% lf “, brut)” aux deux endroits et je parie que le problème disparaît 🙂