2017-05-04 46 views
-6

我想在這個程序中的函數計算數字的平均值,但它不工作:我可以使用兩個整數參數在函數中返回double或float嗎?

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

int i; 
int size = 6; 

int main() { 
    int arr[6] = {1, 2, 3, 4, 5, 6}; 

    avg (arr, & size); 

    return 0; 
} 

double avg (int a[], int *n) { 
    int sum = 0; 
    double average; 

    for (i = 0 ; i < *n ; i++) { 
     sum = sum + a[i]; 
    } 
    average = (double) sum/*n; 
    return average; 
} 

但是,如果我用同樣簡單的void函數做到這一點,相反,它正常工作:

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

int i; 
int size = 6; 

int main() { 
    int arr[6] = {1, 2, 3, 4, 5, 6}; 

    avg(arr, & size); 

    return 0; 
} 

void avg (int a[], int *n) { 
    int sum = 0; 
    double average; 

    for (i = 0 ; i < *n ; i++) { 
     sum = sum + a[i]; 
    } 

    average = (double) sum/*n; 
    printf("%lf", average); 
} 

這兩個void函數和一個簡單的函數有什麼區別?

+0

什麼是簡單的無效函數? –

+3

你的意思是什麼「它不工作」?你在期待什麼?會發生什麼呢? – stakx

+5

1)你應該在main和2之前聲明'double avg(int a [],int * n); 2)你不打印返回的結果。它不會自行打印... –

回答

2

第一個問題是您在使用main()之前尚未聲明您的功能。在調用之前提供一個聲明或原型。

double avg(int a[], int *n); 
int main() { 
... 

其次,在第一次執行,你是不是存儲函數的返回值

avg (arr, & size) ; // useless statement 

剛剛返回值存儲到一個變量,並打印出來,如預期

它會工作
double average = avg (arr, & size); 
printf("%lf", average); 
+0

你試過嗎? –

+1

非常感謝!我不知道我必須申報功能原型。我主要使用void函數,而且他們在沒有原型聲明的情況下工作。 – jaraipali

+0

@jaraipali聲明對於您在程序中使用的所有類型的函數都是必需的,除非您在調用之前定義它們。 –

相關問題