在C中使用过程

时间:2010-09-15 12:28:38

标签: c

#include <stdio.h>

double IncomeTAX(double i)
{
    double tax;

    if(i <= 120000)        
        tax = 0;    
    else        
        tax = (i - 120000) * 15/100;    

    return tax;
}


int main(void)
{    
    double a, b;

    printf  ("Enter the annual income: ");
    scanf   ("%lf", &b);

    a = IncomeTAX(b);

    printf ("Income Tax is %.2lf\n", a);    
}

当我尝试以这种方式运行程序时,它可以工作,但是当我分离程序时,程序会编译但会给出垃圾值。但是,如果我将过程中的数据类型从“double”更改为“long”,即使该过程是单独编译的,程序也能正常工作。

谁能告诉我这背后的原因是什么?

5 个答案:

答案 0 :(得分:5)

如果通过“将程序分开”,则意味着“将IncomeTAX()函数放在不同的源代码文件中”,或许您在使用前未能声明它。把它放在main()

之前
extern double IncomeTAX(double);

通常情况下,这将存在于头文件IncomeTAX.h中。

您需要此声明的原因是否则C将默认使用int;这会导致问题,因为它可能与double不同。

答案 1 :(得分:3)

在没有原型的情况下,编译器会尝试提供帮助,并猜测正确类型的返回值和函数参数。

有时它会猜错(特别是当类型不是int时)。

解决方案:如果要分离函数,请始终将原型用于函数并创建头文件。

答案 2 :(得分:2)

声明和自动输入。如果在使用之前未声明该过程,则假定它是整数类型。将它们放在同一个文件中会增加定义作为声明的效果。如果您只是将主文件中的过程声明为返回一个double,当您将它们分开时,它也会起作用。

FWIW,有一些诗意的关于IncomeTax函数返回 double ......

#include <stdio.h>

double IncomeTAX(double i);

int main(void)
{    
    double a, b;

    printf  ("Enter the annual income: ");
    scanf   ("%lf", &b);

    a = IncomeTAX(b);

    printf ("Income Tax is %.2lf\n", a);    
}

答案 3 :(得分:0)

我假设通过“分离程序”,你的意思是将程序移到一个单独的文件中。

在这种情况下,问题可能是因为您在使用之前没有声明您的程序。如果您没有声明您的过程,编译器将假定所有参数都是int类型。

您需要做的是在调用之前的某个地方声明您的程序。

double IncomeTAX(double i);

通常的惯例是将其添加到头文件中;例如,如果您在IncomeTAX()中定义了tax.c过程,则会在tax.h中声明,然后在包含main()的文件中,您会添加:

#include "tax.h"

答案 4 :(得分:-1)

你有15/100的地方是错误的。这两个数字是整数,因此返回一个整数,0。替换为0.15 / 0.15f。