#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,A,p,
scanf("%lf %lf %lf",&a,&b,&c); //Output is put in integers
p = (a+b+c)/2;
A = sqrt(p*(p-a)*(p-b)*(p-c));
printf("Area of triangle is %lf",A);
//The output is coming out to be -nan for some inputs.
return 0;
}
答案 0 :(得分:3)
输入
1.0 2.0 5.0
你得到了
p = 4.0
p - a = 3.0
p - b = 2.0
p - c = -1.0 // notice the sign
所以你最终得到了
sqrt(-24.0) // ups... sqrt of a negative number
因此,您获得了-nan
也许您应该使用fabs
来消除负值。
BTW: nan
表示&#34;不是数字&#34; - 见https://en.wikipedia.org/wiki/NaN
BTW:始终检查scanf
返回的值,以确保它实际扫描了预期数量的值,即
if (scanf("%lf %lf %lf",&a,&b,&c) != 3)
{
// Input failure - add error handling...
// For instance:
printf("Illegal input - please provide 3 double as input\n");
return -1;
}
答案 1 :(得分:0)
double a,b,c,A,p;
你忘记了; ?
如果你想printf一个浮点数或两倍,你可以使用%f而不是%lf
printf("Area of triangle is %f",A);
您只使用%lf作为浮点数或双精度数的输入,输出使用%f
另一件事可能是sqrt()是否定的。