2016-04-26 7 views
0

Mein Programm hat einen Syntaxfehler:Fehler: „Expected Ausdruck“ in rekursiven Aufruf

Expected expression

Ich bin neu in Rekursion; Ich hoffe ich habe es richtig gemacht.

#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

Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier. Wir können Ihnen nicht effektiv helfen, bis Sie Ihren Code veröffentlicht haben ** und ** das Problem genau beschreiben. Vor allem müssen Sie die gesamte Fehlermeldung einfügen. Dies beinhaltet die Zeilennummer und die Position, an der der Compiler erkannte, dass Sie ein Problem haben. – Prune

Antwort

0

Sie brauchen nicht die []a zu einem poiskmin passieren; Es wurde benötigt, wenn a deklariert wurde, um dem Compiler zu sagen, dass a ein Array war. Danach muss der Compiler nicht mehr erinnert werden.

0

Das Problem ist in dem Argument a []. Ihre Logik muss das gesamte Array und nicht nur ein nicht spezifiziertes Element übergeben. Sie brauchen nur ein hier.

Sobald Sie die Klammern hinzufügen, erwartet der Compiler, dass Sie versuchen, ein Element zu übergeben. Sie haben ihm nicht gesagt, welches Element (innerhalb der Klammern). Deshalb beschwerte es sich über einen fehlenden Ausdruck: Es wurde nach etwas wie a [0] gesucht.


By the way, die Fehlermeldung, die ich von gcc bekommen ist

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

Beachten Sie, wie die Positionsinformationen bei der Suche nach den Fehler sehr hilfreich ist.

0

Das eigentliche Problem in der Leitung ist,

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

Die korrigierte Zeile

std::cout<<"minimum"<< poiskmin(a,n) ; 

[] muss entfernt werden, wenn das gesamte Array zur Funktion als ein Argument übergeben , [] wird verwendet, wenn Sie ein bestimmtes Element des Arrays an die Funktion senden möchten, wie Sie es in der folgenden Anweisung getan haben.

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

Abgesehen von diesen, gibt es einige andere Schleifenlöcher in Ihrem Programm.

1. Es ist immer vorzuziehen, die Variable zu initialisieren.

int n = 0 ; 
int i = 0 ; 

2. Sie ordnen das Vale des Arrays und die Länge des Arrays innerhalb der vvodmas(a,n);-Funktion zu.

Der Gültigkeitsbereich der Variablen wird jedoch als Wert an die Funktion übergeben, die Werte werden nicht ausgefüllt, die Funktion wird nicht im aufrufenden Teil angezeigt. Übergeben Sie die Werte als Verweis auf die Funktion.

Verwandte Themen