2014-02-17 28 views
-5

由于对二进制函数的隐式声明错误,我在使用下面在我的c程序主体中列出的函数时遇到了麻烦。有人可以请指教。 谢谢!即使在头文件包含之后仍然隐式声明函数

#include <stdio.h> 
#include <stdlib.h> 
float twoxaverage(int n, float t__scores[]); 

float getaverage(int n, float t_scores[]) 
{ int sum=0; float average=0; int i; 
    for (i=0; i<n; i++) 
    { 
      sum=sum + t_scores[i]; 
    } 


    average=(float)sum/(float)n; 
    return(average); 
} 

float twoxaverage(int n, float t__scores[]) 
{ float mult; 
    mult=2*(getaverage(n, t__scores)); 
    return (mult); 
} 

int main() 
{ 
    int t_score[]={1,2,3,4}; 
    float twox; 
    twox=twoaverage4,t_score); 
    float twoxaverage(int n, float t__scores[]); 

    return 0; 
} 
+1

究竟是什么错误?隐式声明哪个函数? – Kninnug

+6

该代码甚至在语法上都不是有效的。请发布错误的完整详细信息的实际代码。 – NPE

+0

你想通过在主函数中包含'float twoxaverage(int n,float t__scores []);'来做什么?我认为你不需要这个。 – user376507

回答

1

你的主要应该从移动:

int main(){ 

    int t_score[] = { 1, 2, 3, 4 }; float twox; 
    twox = twoaverage4, t_score); float twoxaverage(int n, float t__scores[]); 

    return 0; 
} 

TO:

int main(){ 

    int t_score[] = { 1, 2, 3, 4 }; 
    float twox; 
    twox = twoxaverage(4, t_score); 

    return 0; 
} 

作为开始。

我也可以简化您:

float getaverage(int n, float t_scores[]){  
    int sum=0; float average=0; int i; 
    for (i=0; i<n; i++){ 
     sum=sum + t_scores[i]; 
    } 

    average=(float)sum/(float)n; 
    return(average); 
} 

TO:

float getaverage(int n, float t_scores[]){  
    float average=0; int i; 

    for (i=0; i<n; i++){ 
     average = average + t_scores[i]; 
    } 

    return(average/(float)n); 
} 

这少使用一个变量,并执行相同的数学。

+0

虽然风格很好,但我不明白这会如何改变。 –

+0

@LightnessRacesinOrbit - 你没有看到他的主程序,特别是线“twox = twoaverage4,t_score); float twoxaverage(int n,float t__scores []);”??? – trumpetlicks

+0

哦,是的,我错过了他明显的语法错误。 :) –

0

在这一行,你有一个标识符

twox=twoaverage4,t_score);float twoxaverage(int n, float t__scores[]); 

而不是

twox=twoaverage4,t_score); 

至少两个错别字必有

twox = twoxaverage(4,t_score); 

而且下面的函数的声明是不必要的。因此,而不是

twox=twoaverage4,t_score);float twoxaverage(int n, float t__scores[]); 

可以简单的写

twox = twoxaverage(4,t_score); 

我想你不仅得到了平均水平,但也将其输出。所以,你至少可以添加声明

std::cout << twox << std::endl; 

或者如果它是一个C程序,那么你可以使用printf而不是C++ operator <<输出twox

还要考虑到你的函数getaverage是错误的。您转换浮点数为int的时候将它们添加到总结

  float getaverage(int n, float t_scores[]) 
      { int sum=0; float average=0; int i; 
       for (i=0; i<n; i++) 
      { 
       sum=sum + t_scores[i]; 
      } 


      average=(float)sum/(float)n; 
      return(average); 
      } 

有效的功能,可以看下面的方式

  float getaverage(int n, const float t_scores[]) 
      {  
       float sum = 0.0f; 

       for (int i = 0; i < n; i++) 
       { 
        sum += t_scores[i]; 
       } 

       return (n == 0 ? 0.0f : sum/n); 
      } 

或者,如果您使用的是旧的C编译器,则函数可以写成

  float getaverage(int n, const float t_scores[]) 
      {  
       float sum = 0.0f; 
       int i = 0; 

       for (; i < n; i++) 
       { 
        sum += t_scores[i]; 
       } 

       return (n == 0 ? 0.0f : sum/n); 
      } 

功能twoxaverage可以简化下面的方式

inline float twoxaverage(int n, const float t__scores[]) 
{ 
    return (2 * getaverage(n, t__scores)); 
} 
相关问题