2016-04-26 2 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

あなたはpoiskminaを渡す[]は必要ありません。 aが宣言されたときに、aが配列であることをコンパイラに伝えるために必要でした。その後、コンパイラに注意する必要はありません。

0

問題は引数[]にあります。あなたのロジックは、不特定の要素だけでなく、配列全体を渡す必要があります。ここにはが必要です。

大括弧を追加すると、コンパイラは要素を渡そうとしていると見なします。あなたはどの要素(かっこの中に)を教えていませんでした。だからそれは不足している表現に不平を言う理由です:それは[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);関数内に代入しています。

しかし、変数のスコープは値によって関数に渡され、値は入力されず、関数は呼び出し元の部分に反映されません。値を関数の参照として渡します。