Réponse correcte avant le retour, incorrecte après le retour

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 🙂