将变量传递给C中的函数

时间:2015-11-16 22:51:49

标签: c function variables

#include <stdio.h>
//function prototype
double triangle(double b ,double h);
//main function
int main(void)
{
    //declare variables
    double height,base, ans;
    //take input
    printf("Please give the height of the triangle:");
    scanf("%d",&height);
    printf("Please give the base of the triangle:");
    scanf("%d",&base);
    //pass variables to triangle function and equal returned value to ans
    ans = triangle(base,height);
    //prdouble returned doubleeger
    system("CLS");
    system("COLOR C");
    printf("\n\n\t\t\tThe area of the triangle is: %d\n\n\n", ans );
    return 0;
}
//area function
double triangle(double b, double h)
{
    printf("Hello");
    //declare varible 
    double a;
    //process data
    a = (b*h)/2;
    //return ans to main
    return (a);

}

上面是程序计算三角形区域的代码,但是当我使用整数时它起作用,当我尝试使用双精度时,它无法运行“三角形”函数。我可以就这是为什么得到一些建议吗?

5 个答案:

答案 0 :(得分:2)

%d格式字符串scanf用于int值。对于float值,您需要%f%lf代表double}。

格式字符串和指针类型之间的不匹配是“未定义的行为”,可能导致所有类型的错误(甚至只是在某些情况下工作)。

答案 1 :(得分:2)

使用%lf阅读double个数字:

scanf("%lf",&height);
scanf("%lf",&base);

使用%f打印doublefloat个变量:

printf("\n\n\t\t\tThe area of the triangle is: %f\n\n\n", ans );

答案 2 :(得分:1)

%d实际上用于整数,尽管看起来它可能代表double(我喜欢将%d视为数字)。

%f用于浮点数。

%lf用于双重类型。 double是一种浮点数,其位数加倍。 double通常有64位,float通常是32位。 l是较大类型的长度修饰符。 (我喜欢把它记住为长期浮动&#39;。)

答案 3 :(得分:0)

如果不知道“失败”在您的问题中意味着什么,我会尝试更改您的scanf语句,以使用双格式说明符%lf而不是%d

scanf("%lf", &height);

答案 4 :(得分:0)

正如其他人所说,你需要改变你需要从用户那里获取的类型。

scanf("%lf %lf", &height, &base);

这应该可以解决问题。 祝你好运M8。

P.S &#34;%LF&#34;和&#34;%f&#34;,两者都给你相同的结果。小数点后的六位精度。