我试图计算2点A,B之间的距离。当我运行终端窗口时,它会给我一个错误的数字。任何人都可以帮我改变一些价值,或者结构或许多提示。
示例: 在A:-50 -50 在B:50 50 距离是141.42
#include<stdio.h>
#include<conio.h>
#include<math.h>
typedef struct{
double a;
double b;
double c;
double d;
}location;
double dist(location w,location x, location y,location z)
{
double l;
l=sqrt(pow((y.c-w.a),2)+pow((z.d-x.b),2));
return(l);
}
void main()
{
location h;
location i;
location j;
location k;
printf("Enter 1st point(A)\n");
scanf("%lf %lf",&h.a,&i.b);
printf("Enter 2nd point(B)\n");
scanf("%1f %1f",&j.c,&k.d);
double data;
data = dist(h,i,j,k);
printf("%.2lf",data);
}
答案 0 :(得分:2)
您是否注意到两行上scanf
格式字符串之间的区别:
scanf("%lf %lf",&h.a,&i.b);
scanf("%1f %1f",&j.c,&k.d);
那是对的!第二行使用%1f
而不是%lf
。这有一个完全不同的含义,在你的情况下是错误的。使用%lf
。
当你得到的结果你不明白,它是使用调试器的好时机,或添加printf
语句来检查你的变量值与你期望的结果。
答案 1 :(得分:0)
通过paddy的修正,代码应该有效,但我仍然认为值得一提/纠正较小的错误。
首先,标准中未定义void main()
。 Why is it bad to type void main() in C++
如果您正在使用GCC,请尝试使用-Wall
参数进行编译。然后你会得到更多的警告,这将有助于你最终编写更好的代码。
另外,为什么你有4个地点有4个成员?我稍微重构了一下你的代码,我认为这个版本更容易阅读和理解。
#include <stdio.h>
#include <math.h>
typedef struct {
double x;
double y;
} Point;
double DistanceBetween(Point p1, Point p2)
{
Point vector = {
p2.x - p1.x, p2.y - p1.y
};
return hypot(vector.x, vector.y);
}
int main()
{
Point p1;
Point p2;
printf("Enter first point: ");
scanf("%lf %lf", &p1.x, &p1.y);
printf("Enter second point: ");
scanf("%lf %lf", &p2.x, &p2.y);
double distance = DistanceBetween(p1, p2);
printf("The distance is: %lf\r\n", distance);
return 0;
}