2017-12-08 5 views
0

Ich habe ein Problem mit einer Funktion .. Ich möchte die Funktion zwei Argumente haben. wird man ein Array von Objekten sein und die zweite wird der Code vom Benutzer gegeben werden und in die Funktion eine lineare Suche und überprüfen, ob die Benutzer-Code vorhanden ist, und wenn der Code existiert, wird zurückkehren, um seine Position in dem Array sonst gibt -1 ...lineare Suche auf Array von Objekt C++

dies zu laufen, was ich versuche bereits:

int passwdSearch(Eidos pinPro[], int pass) 
{ 
int i=0; 
bool found; 
found=false; 
while(i<N && found==false) 
{ 
    if(pinPro[i].getPasswd()==pass) 
    { 
     found=true; 
     return i; 
    } 
    else 
     return -1; 
    i++; 

} 

}

Ich möchte die Funktion die Position zurück, wenn Kennwort existieren sonst symbolische Zahl -1 zurück

Das Problem ist, dass der Code Rückkehrposition nur für das erste Element des Arrays und die 4 anderen Element Funktion return -1

+0

Hinweis: Dieser Code kann nie erreichen Ihre 'i ++;'. Sie kommen immer von der Funktion zurück, bevor Sie diese Linie erreichen. –

+1

dude, 'std :: find_if' –

+0

Nicht alle Codepfade geben einen Wert zurück ... –

Antwort

0

Das else wird immer aktiviert, wenn das Element nicht das erste Element im Array ist. Sie sollten es löschen und -1 nach der Weile zurückgeben.

int passwdSearch(Eidos pinPro[], int pass) 
{ 
    int i=0; 
    bool found; 
    found=false; 
    while(i<N && found==false) 
    { 
     if(pinPro[i].getPasswd()==pass) 
     { 
      found=true; 
      return i; 
     } 
    } 
    return -1; 
} 

Auf diese Weise, wenn Sie das gesamte Array durchlaufen und Sie finden nicht das gewünschte Element, dann Sie würden -1 zurück.

bearbeiten

Und wie NathanOliver erwähnt, gefunden ist nutzlos, weil Sie sowieso zurückkehren, wenn Sie ein Element finden. So ist der Code wird:

int passwdSearch(Eidos pinPro[], int pass) 
    { 
     int i=0; 
     while(i<N) 
     { 
      if(pinPro[i].getPasswd()==pass) 
       return i; 
      i++; 
     } 
     return -1; 
    } 
+3

'find = true;' ist unnötig, wenn Sie von der Funktion in der nächsten Zeile zurückkehren. – NathanOliver

+0

@nathanOliver wahr, ich habe es nur schnell geändert, so dass es funktioniert, schlecht bearbeiten, danke. –

+0

Fehlendes 'i ++'. Beachten Sie auch, dass dies C++ ist und Sie können eine for-Schleife 'für (int i = 0; i smac89

3

Try this:

int passwdSearch(Eidos pinPro[], int pass) 
{ 
    for(int i=0; i<N; i++) 
    { 
     if(pinPro[i].getPasswd()==pass) 
      return i; 
    } 
    return -1; 
} 
+1

Schöne Reinigung dort verwenden. –

1

Versuchen Sie diesen Code

int passwdSearch(Eidos pinPro[], int pass) 
{ 
    int i=0; 
    bool found; 
    found=false; 
    while(i<N && found==false) 
    { 
     if(pinPro[i].getPasswd()==pass) 
     { 
     found=true; 
     return i; 
     } 
    else 
     i++; 
    } 
    return -1; 
}