2016-04-26 27 views
0

我的程序有語法錯誤:錯誤:遞歸調用「預期的表達」

Expected expression

我是新來的遞歸;我希望我做對了。

#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); 
} 
+1

歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在您發佈代碼**和**準確描述問題之前,我們無法有效幫助您。最重要的是,你需要包含整個錯誤信息。這將包括編譯器意識到您遇到問題的行號和位置。 – Prune

回答

0

你不需要[]通過apoiskmin;當聲明a時,需要告訴編譯器a是一個數組。之後,編譯器不需要提醒。

0

問題出在a []。你的邏輯需要傳遞整個數組,而不僅僅是一個未指定的元素。您只需要a這裏。

一旦添加了括號,編譯器就會期望您嘗試傳遞一個元素。你沒有告訴它哪個元素(在括號內)。這就是爲什麼它抱怨失蹤的表達:它被尋找像a [0]


順便說一句,該錯誤信息,我從GCC得到的是

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

注意位置信息是如何在發現錯誤非常有幫助。

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);函數內的數組長度。

但是變量的作用域是通過值傳遞給函數的,函數中的值不會被填充,也不會反映到調用者的部分,所以傳遞值作爲函數的參考。