2013-03-08 97 views
0

而在終端編譯此代碼,我得到一個錯誤說:錯誤調用函數

newfile1.c:17: error: conflicting types for ‘average’ 
newfile1.c:2: note: previous declaration of ‘average’ was here 

我看不出有什麼不對的代碼。有人可以幫我嗎?

enter code here 
#include<stdio.h> 
float average(float); 
int main() 
{ 
     float marks[4],avg; 
     int i; 
     printf("Please enter your marks\n"); 
     for(i=0;i<=3;i++) 
     { 
       scanf("%d",&marks[i]); 
     } 
     avg = average(marks[4]); 
     printf("The average marks value is %f",avg); 
     return 0; 
} 



float average(float a[4]) 
{ 
     int i,sum; 
     float avg_m; 
     for(i=0;i<=3;i++) 
     { 
       sum=sum+a[i]; 
     } 
     avg_m=sum/3; 
     return avg_m; 
} 

回答

9

更換

float average(float); 

float average(float[]); 

函數聲明和定義不匹配。

然後調用這樣的功能:

avg = average(marks);

+0

我這樣做,並得到了兩個錯誤: newfile1.c:12:錯誤:不兼容的類型爲「平均」 newfile1.c的說法1:2:注意:預期'浮動*',但參數類型'浮動' – 2013-03-08 07:12:10

+0

函數調用應該是'平均=(平均(標記)' – uba 2013-03-08 07:23:55

2

行更改您的文件

float average(float); 

float average(float []); 

聲明該函數取一個float代替你想要數組floats

而且,雖然在main調用它,更改爲

avg = average(marks); 
+0

好的,謝謝!但是,爲什麼您刪除了標記的括號?我們不希望它將陣列標記作爲輸入並使用它嗎? – 2013-03-08 07:13:41

+0

@SamyuktaRamnath,'marks'會給你數組的起始地址,而'marks [4]'會給你數組中的第5個元素,這不是必需的。 – Rohan 2013-03-08 07:19:47

1
float average(float); 

期望一個浮點變量。您需要傳遞數組,因此請添加 float average(float[]);。自你的函數聲明和定義不匹配發生錯誤。

在你的主體中,你應該調用avg = average(marks);來傳遞數組函數avg = average(marks[4]);會傳遞一個變量。

0

你的功能average需要一個float作爲參數,因此,聲明應該是floa avaerage(float)。如果你做float average(float a[4])你告訴編譯器你的函數接受一個由4個浮點數組成的參數。

1

average的原型中,您已將float作爲參數類型,因此編譯器期望將單個浮點值作爲參數。如果你想傳遞值的數組,你必須聲明你的原型是這樣的:

float average(float input_marks[]); 

你不能給在原型或定義數組參數的長度。您必須將數組長度作爲單獨的參數傳遞。所以,你的原型應該是這個樣子

float average(float a[], int a_length);