2017-04-08 32 views
-2

我是受了我的答案是不是給我一個浮動的這個簡單的功能相當困惑:爲什麼我的函數返回一個整數,雖然我已經指定了答案作爲一個浮點數?

#include <iostream> 
using namespace std; 


int average(int a[], int num){ 
    float avg = 0; 
    for (int i = 0; i<num; i++){ 
     avg += a[i]; 
    } 
    avg = avg/num; 
    cout<<avg<<endl; //gives 1.5 
    return avg; 
} 

int main(){ 
    int a[] = {1,2}; 
    float result = average(a, 2); 
    cout<<result<<endl; //gives 1 
    return 0; 
} 

由於可以在評論中可以看出,爲什麼會在函數的輸出爲1時,最終計算值是1.5?我還指定了以浮點形式返回的答案,所以我不知道它爲什麼仍然給我一個整數。

+2

'average'應該返回float,而不是int。 –

+0

是的,但'result'的輸出是1而不是1.5。這是奇怪的部分。 – kwotsin

+3

'int average(int a [],int num)'是返回int的函數的簽名。 –

回答

4

我也指定了答案以浮點形式返回,所以我 不知道爲什麼它仍然給我一個整數。

因爲average回報int,所以你float(即您在返回average)被強制轉換爲int,返回,然後回到float並存儲到result。由於投射到int而失去任何精度。

+0

感謝您的回答!我沒有意識到我首先將我的函數聲明爲int,所以這就是原因。 – kwotsin

3
float average(int a[], int num){ 
    float avg = 0; 
    for (int i = 0; i<num; i++){ 
     avg += a[i]; 
    } 
    avg = avg/num; 
    cout<<avg<<endl; //gives 1.5 
    return avg; 
} 

忘記在函數聲明中指定返回值類型爲float。

相關問題