C 返回前回答正确,返回后回答不正确

C 返回前回答正确,返回后回答不正确,c,C,我已经在谷歌上搜索了几个小时,但是运气不好 我正在使用标准c,调用一个非常简单的方法,并返回正确的值,但返回后的值是完全错误的 电话: 方法: 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;

我已经在谷歌上搜索了几个小时,但是运气不好

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

电话:

方法:

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;
}
double calcGross(双倍费率,双倍小时){
双倍毛;
//如果此人工作时间不超过40小时

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

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

问题在于,在第一个示例中调用
calcgross()
函数之前,您没有给出该函数的声明或原型

在没有看到函数的声明/原型的情况下,C编译器会假设它返回的是
int
,而不是
double
,因此情况会非常糟糕

在调用函数之前的某个位置放置以下行(理想情况下是在包含的标题中):

使用
-Wall
编译器选项会对此给出以下警告:

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

编译器是否发出任何警告?您在调用之前是否为函数提供了原型?您是否确定您提供的代码与您使用的代码完全一致?您不可能拼写错误正在打印的变量名,或者在函数调用和
printf()之间声明新的
gross
?您在调用之前还是之后声明了calcGross?
%f
对于
printf()
应该是相同的
%lf
,因为
float
在varargs列表中出现时会提升为
double
。这对于
scanf()很重要
因为您传递的是指针。我对此表示怀疑。对于采用变量参数的函数,
printf(“%f”)C将浮点提升为双倍
应该可以正常工作,正如正确打印的第一个值所证实的那样。我确信这是准确的代码,名称是正确的。%lf是我第一次尝试修复的代码之一,但它给出了完全相同的输出。如果需要,我可以发布整个代码。谢谢。我将在编译脚本中添加-Wall。
double calcGross(double rate, double hours);
test.c:73:5: warning: implicit declaration of function 'calcGross' [-Wimplicit-function-declaration]