我有一个函数average
,它接受一个int数组和int长度并返回该数组的平均值。我想从另一个函数lessThanAverage
中调用它,它计算的项目数小于平均值。我试图将返回值存储在变量中,但我得到了:
main.cpp:86:23: error: expected expression average=average(A[],length);
我做错了什么?我之前只用Java编程,所以我对C不太熟悉。
double average(int A[], int length) {
double average=0.0;
if(length!=0){
for(int i = 0; i<length; i++){
average+=A[i];
}
return average/length;
}else{
return 0.0;
}
}
另一个功能:
int lessThanAverage(int A[], int length) {
int count=0;
double average=0;
average=average(A[],length);
for(int i = 0; i<length; i++){
if(A[i]<average){
count++;
}
}
return count;
}
答案 0 :(得分:3)
你有两个错误
average
既是函数又是变量A[]
,应该是A
这是一个工作版本:
int lessThanAverage(int A[], int length) {
int count = 0;
double avg = average(A,length);
for(int i = 0; i<length; i++){
if(A[i]<avg){
count++;
}
}
return count;
}
答案 1 :(得分:1)
范围问题:
局部变量average
与父作用域中的函数average()
具有相同的名称。
原因:
局部变量average
隐藏了#{0}。父范围中的函数average()
。
<强>说明:强> 当您在子范围中声明一个与现有变量同名的变量或在封闭范围内声明的函数时,现有变量将被隐藏, &#39;无法访问,直到程序退出声明局部变量的范围。
示例:强>
double average() {
//some code//
}
void compute() {
//some code//
int average; // At this point, the function average is hidden.
//more code//
} // The block exits here, so variable average is no longer in scope,
// and the function average is no longer hidden.