A,B之间的距离

时间:2017-04-26 05:16:28

标签: c

我试图计算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);
}

2 个答案:

答案 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;
}