正确的答案在返回之前,返回不正确

正确的答案在返回之前,返回不正确

问题描述:

我一直在谷歌搜索几个小时,但没有运气。正确的答案在返回之前,返回不正确

我使用标准的c,调用一个非常简单的方法,并返回正确的值,但返回后的值是完全错误的。

电话:

 //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 

方法:

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; 
} 

我打印出来的值,并开始尝试解决这个问题的方法,但我无法弄清楚。下面是输出:

(正确)(不正确的,返回后)

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,-85 8993460.000000

529.600000,-858993459.000000

4441.522500,-1030792152.000000

100.000000,0.000000

1882.710000,171798692.000000

我唯一的猜测是,要么我的双回帖子是太长适合双倍的长度,但是我将它存储在一个双重预回收中,并且打印正确。如果是这种情况,我无法弄清楚如何解决它。 我的另一个猜测是,我打印出错后返回,但我打印它的方式相同。

我正在使用Linux和gcc编译器(如果有的话)。任何帮助,将不胜感激。我一直在努力解决这个看似简单的问题几个小时。

+0

编译器是否发出任何警告?在通话之前您是否提供了该功能的原型? – FatalError 2012-03-20 03:23:10

+0

你确定你给我们的代码完全一样吗?你不可能拼错打印出的变量名,或者在函数调用和printf()之间声明一个新的'gross'? – 2012-03-20 03:23:44

+0

试试%lf打印双份 – John3136 2012-03-20 03:24:54

问题是,在第一个示例中调用calcgross()函数之前,您尚未给出函数声明或原型。

如果没有看到该函数的声明/原型,C编译器会假定它返回的是int而不是double,所以事情变得非常糟糕。

放置以下行某处调用该函数(理想情况下,你包括标题)前:使用

double calcGross(double rate, double hours); 

-Wall编译器选项会给你这个以下警告:

test.c:73:5: warning: implicit declaration of function 'calcGross' [-Wimplicit-function-declaration] 
+0

谢谢。我将添加-Wall到我的编译脚本。 – user1279914 2012-03-20 03:33:04

愚蠢,微妙的错误。在这两个地方使用“printf(”%lf“,gross)”,我会打赌问题消失:)

+1

''f''应该与'printf()'相同'%lf',因为'float'出现在可变参数列表中时被提升为'double'。这对scanf()很重要,因为你正在传递指针。 – FatalError 2012-03-20 03:26:20

+1

我对此表示怀疑。如果函数需要可变参数,C将浮点数加倍,printf(“%f”)应该工作得很好,正如第一个值被正确打印出来一样。 – 2012-03-20 03:27:59

+1

%f是正确的。 :D – madper 2012-03-20 03:28:15

最有可能的问题是,在使用它之前,您没有声明calcGross,编译器将假定默认返回类型(int)。在使用之前,尝试放置calcGross()定义。

+0

正确;相应地编辑我的断言。谢谢! – 2012-03-20 03:45:22