#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);
}
上面是程序计算三角形区域的代码,但是当我使用整数时它起作用,当我尝试使用双精度时,它无法运行“三角形”函数。我可以就这是为什么得到一些建议吗?
答案 0 :(得分:2)
%d
格式字符串scanf
用于int
值。对于float
值,您需要%f
(%lf
代表double
}。
格式字符串和指针类型之间的不匹配是“未定义的行为”,可能导致所有类型的错误(甚至只是在某些情况下工作)。
答案 1 :(得分:2)
使用%lf
阅读double
个数字:
scanf("%lf",&height);
scanf("%lf",&base);
使用%f
打印double
或float
个变量:
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;,两者都给你相同的结果。小数点后的六位精度。