2017-04-26 1 views
0

2 점 A, B 사이의 거리를 계산하려고했습니다. 터미널 창을 실행하면 잘못된 숫자가 표시됩니다. 아무도 내가 어떤 가치를 바꾸거나 stuct 또는 많은 조언을 바꾸도록 도와 줄 수 있습니까?A, B 사이의 거리

예 : A의 : B에서 -50 -50 : 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

141.42는 해당 지점 간의 정확한 유클리드 거리입니다. 그 거리가 뭘 기대하니? – user1118321

+3

'% 1f'형식을 사용할 때, 대부분 한 자리수가 읽혀질 것입니다. 소문자 L을 잘못 입력 한 것처럼 보이며 대신 숫자 1을 사용했습니다. – paddy

+4

진짜 질문은 여기에 4 개의 위치가있는 이유입니다 (또는 위치에 4 ​​가지가있는 이유) –

답변

2

당신이 두 가지에 대한 당신의 scanf 형식 문자열의 차이를 고지해야 할 것입니다 줄 :

scanf("%lf %lf",&h.a,&i.b); 
scanf("%1f %1f",&j.c,&k.d); 

맞아요! 두 번째 줄은 %lf 대신 %1f을 사용합니다. 그것은 완전히 다른 의미를 지니고 있으며, 여러분의 경우에는 틀린 것입니다. %lf을 사용하십시오.

이해할 수없는 결과가 나오면 디버거를 사용하거나 printf 문을 추가하여 변수 값이 예상 한 값과 맞는지 확인할 수 있습니다.

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; 
} 
+1

sqrt (pow (vector.x, 2) + pow (vector.y, 2)'를 표준 함수'hypot()'로 대체 할 수있다. – chux

관련 문제