2017-05-07 21 views
-2

我有以下代碼說'距離'在此函數中未初始化使用。圓的區域使用笛卡爾平面的點

這是一個代碼,它接受來自笛卡爾平面的兩個座標,並使用它們之間的距離作爲半徑來查找圓的面積。這是代碼

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

struct Point { 
    int x, y; 
}; 


double getDistance(struct Point a, struct Point b) 
{ 
    double distance; 
    distance = sqrt((a.x - b.x) * (a.x - b.x) + (a.y-b.y) *(a.y-b.y)); 
    return distance; 
} 



int main() 
{ 
    float Area; 
    double distance; 
    struct Point a, b; 
    printf("Enter coordinate of point a: "); 
    scanf("%d %d", &a.x, &a.y); 
    printf("Enter coordinate of point b: "); 
    scanf("%d %d", &b.x, &b.y); 
    printf("Distance between a and b: %lf\n", getDistance(a, b)); 

    Area= 3.14 * distance * distance; 
    printf("\nArea of Circle : %f", Area); 


    return 0; 
} 
+3

難道這應該是C或C++?什麼是實際的錯誤信息,包括文件名和行號? – melpomene

+0

getDistance()中的變量'distance'處於不同的範圍內,因此與'main()'中的變量'distance'完全無關。 – Peter

+0

當然是的。看看'main'函數。你聲明一個名爲'distance'的變量,但是不會初始化它。然後,你做'Area = 3.14 * distance * distance;'Oops。 –

回答

0

你忘了分配distance變量,你可以試試:

int main() 
{ 
    float Area; 
    double distance; 
    struct Point a, b; 
    printf("Enter coordinate of point a: "); 
    scanf("%d %d", &a.x, &a.y); 
    printf("Enter coordinate of point b: "); 
    scanf("%d %d", &b.x, &b.y); 
    distance = getDistance(a, b); 
    printf("Distance between a and b: %lf\n", distance); 

    Area= 3.14 * distance * distance; 
    printf("\nArea of Circle : %f", Area); 


    return 0; 
} 
3

這是正確的:變量distancegetDistance和可變distancemain是兩個不同的變量。

當你寫這個

printf("Distance between a and b: %lf\n", getDistance(a, b)); 

distancemain不被設置。

您可以通過添加分配

distance = getDistance(a, b); 
printf("Distance between a and b: %lf\n", distance); 

實現注意事項解決這個問題:由於需要距離平方,可避免定義一個函數getDistanceSquared,並使用它,而不是採取平方根。

1

您應該仔細閱讀編譯器警告,因爲它指的是main函數中的變量distance而不是getDistance中的函數。

我想,你真正想做的事是這樣的:

distance = getDistance(a, b); 
printf("Distance between a and b: %lf\n", distance); 

然後,你可以在你main功能使用的getDistance結果的任何地方。 ;)