2013-11-09 94 views
0

我想計算一些整數,並且我知道計算的答案將包含小數,所以我必須使用double。我已經評論了我認爲代碼中的問題在哪裏(/ /這是一切出錯的地方)。C計算整數,但返回一個浮點數

我試圖通過鍵入obs.avgX = (float) (arr[0].x + arr[1].x + arr[2].x + arr[3].x + arr[4].x)/5;來計算計算,但它根本不起作用。

#include <stdio.h> 

int main(void) 
{ 

    struct Observations 
    { 
     int x; 
     int y; 
     double avgX; 
     double avgY; 
    }; 

    struct Observations arr[5]; 
    struct Observations obs; 


    for(int i=0; i < 5; i++) 
    { 
     printf("Enter coordinates for point #%d (x,y): ", i +1); 
     scanf("%d, %d", &arr[i].x, &arr[i].y); 
    } 

    printf("\n\nYou entered:\n"); 

    for(int i=0; i < 5; i++) 
    { 
     printf("Point #%d: %d,%d\n", i, arr[i].x, arr[i].y); 
    } 

    // This is where everything goes wrong 
    obs.avgX = (arr[0].x + arr[1].x + arr[2].x + arr[3].x + arr[4].x)/5; 
    obs.avgY = (arr[0].y + arr[1].y + arr[2].y + arr[3].y + arr[4].y)/5; 

    printf("Average of X: %.2f\n", obs.avgX); 
    printf("Average of Y: %.2f", obs.avgY); 


    getchar(); 
    getchar(); 

    return 0; 

回答

2

此行

obs.avgX = (arr[0].x + arr[1].x + arr[2].x + arr[3].x + arr[4].x)/5; 

做整數運算

你需要強制使用浮點數

obs.avgX = (float)(arr[0].x + arr[1].x + arr[2].x + arr[3].x + arr[4].x)/5.0f; 
+0

好的,但我真的必須使用**(float)**嗎?它只是通過使用** 5.0f **就像一個sharm。 – user2971623

+1

我是一個明顯的有點傢伙 - 所以法官告訴我 –

+0

嗯,是的,也許最好是爲視覺輸入(浮動),但也許這是一個壞主意的性能? – user2971623

0
obs.avgX = (arr[0].x + arr[1].x + arr[2].x + arr[3].x + arr[4].x)/5; should be 

obs.avgX = (float) (arr[0].x + arr[1].x + arr[2].x + arr[3].x + arr[4].x)/5 
+0

我正在玩座標,所以逗號是打算。這不起作用。我必須輸入** ... arr [4] .x)/ 5.0f **。 – user2971623

+0

@ user2971623你必須在你的代碼中提及它!反正我已經改變了它 – niko