错误:"预期表达"在递归调用中

时间:2016-04-26 17:08:39

标签: c++ recursion

我的程序有语法错误:

  

预期表达

我是递归的新手;我希望我做得对。

#include <iostream>
void vvodmas(int a[],int n);
int poisk(int a[],int n,int min , int i);
int poiskmin( int a[], int  n);
int main()
{ int n;int i;
  int a[i];
  std::cout<<"massiv: ";
  vvodmas(a,n);
  std::cout<<std::endl;
  std::cout<<"minimum"<< poiskmin( a[],n);     // here is the problem

}
void vvodmas(int a[],int n)
{ std::cout<<"n?";
  std::cin>>n;
  for (int i=0;i<n;i++)
    std::cout<< a[i]<<" ";
}
int poisk(int a[], int n,int min, int i)
{
  if (i<n)
  { if (a[i]<min)
    min=a[i];
    i++;
    poisk(a,n,min,i);
  }
else
  return min;

}
int poiskmin( int a[], int  n)
{
  return poisk( a, n, a[0], 0 );
}

3 个答案:

答案 0 :(得分:0)

您不需要[]a传递给poiskmin;声明a时需要它,告诉编译器a是一个数组。之后,不需要提醒编译器。

答案 1 :(得分:0)

问题在于 a [] 。您的逻辑需要传递整个数组,而不仅仅是未指定的元素。您只需要 a

添加括号后,编译器希望您尝试传递元素。你没有告诉它哪个元素(在括号内)。这就是为什么它抱怨表达缺失的原因:它寻找像 a [0] 这样的东西。

顺便说一句,我从 gcc 获得的错误信息是

a.c:11: error: expected primary-expression before ‘]’ token

请注意位置信息如何帮助您找到错误。

答案 2 :(得分:0)

实际问题在于,

std::cout<<"minimum"<< poiskmin( a[],n);     // here is the problem

更正后的行

std::cout<<"minimum"<< poiskmin( a,n) ;
将完整数组作为参数传递给函数时,必须删除

[] ,当您要发送特定元素时,将使用 [] 数组到函数,就像你在下面的语句中所做的那样。

return poisk( a, n, a[0], 0 );

除此之外,您的程序中还有一些其他循环漏洞。

1。始终最好初始化变量。

int n = 0 ;
int i = 0 ;

2。您正在vvodmas(a,n);函数中分配数组的值和数组的长度。

但是变量的范围是通过值传递给函数的,函数中不会填充的值不会反映在调用者部分中,将值作为函数的引用传递。