Correct answer before return, wrong after return
I have been working for hours, but with no luck.
I am using standard c, calling a very simple method and returning the correct value, but after returning, the value is completely wrong.
call:
//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
Method:
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;
}
I am printing the values inside and out of the method to try and solve it, but I cannot figure it out. Here's the result:
(correct) (incorrect, after return)
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
My only guess was that my double postback was too long to fit the length of the double, but I saved it in the double preposition and printed it correctly. If so, I couldn't figure out how to fix it. My other guess was that I am printing out the wrong post-return, but I am printing it the same way.
I am using Linux and with gcc compiler if it matters. Any help would be greatly appreciated. I've been trying to fix this seemingly simple issue for hours.
source to share
The problem is that you didn't give a declaration or prototype for the function calcgross()
before calling it in the first example.
Without seeing the function declaration / prototype, the C compiler will assume it is returning int
, not double
, so things go horribly wrong.
Place the following line somewhere before you call the function (ideally in the header that you include):
double calcGross(double rate, double hours);
Using a -Wall
compiler option will give you the following warning about this:
test.c:73:5: warning: implicit declaration of function 'calcGross' [-Wimplicit-function-declaration]
source to share