2017-04-26 15 views
0

私は2点A、Bの間の距離を計算しようとしました。私がターミナルウィンドウを実行すると、それは私に偽の番号を与えます。誰かが私にいくつかの価値を変えるのを助けることができますか、またはstuctまたは多くのヒント。A、Bの間の距離

例:中 :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'という形式を使うと、たいてい1桁が読み込まれます。あなたは小文字のLをミスタイプしたように見え、代わりに1桁を使用しています。 – paddy

+4

実際の質問は、ここに4つの場所がある(または場所に4つの場所がある理由) –

答えて

2

を使用すると、2つの上ごscanfフォーマット文字列間の違いに気づくかであります行:

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

そうです。 2行目は%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

標準関数 'hypot()'で 'sqrt(pow(vector.x、2)+ pow(vector.y、2)'を置き換えることができます。 – chux

関連する問題