2016-12-26 17 views
-2

Ich habe ein Array von structs, die mit einigen Werten gefüllt sind. Ich fordere den Benutzer auf, einen Wert einzugeben. Ich muss dann das Array überprüfen, um zu sehen, ob der Wert, den der Benutzer eingegeben hat, im Array enthalten ist.
Wenn es gefunden wird, wird das Programm die Ausführung fortsetzen.
Wenn es nicht gefunden wird, fordert das Programm den Benutzer auf, einen anderen Wert einzugeben.Wie vergleiche ich mit mehreren Werten in der Bedingung einer While-Schleife

Unten ist der Code, den ich schon geschrieben habe. Sie können sehen, dass ich versucht habe, das Array als Teil der Do-while-Schleife zu scannen, aber das funktioniert nicht.

do 
{ 
    printf("Insert the number you want to search:\n"); 
    numero = getInputFromUser(); 
} while (for (i = 0; i < numAlunos; i++) // This is where I need help 
      numero != vAlunos[i].numero) 

Wie kann ich ein Array im Rahmen einer Schleifenbedingung scannen?

+2

eine neue Funktion schreiben, die th durchführen wird Suchen Sie und geben Sie zurück, ob es gefunden wurde oder nicht. Sie können die Funktion dann in Ihrer while-Schleife verwenden. – pstrjds

+0

Ich habe versucht, Ihre Frage neu zu formulieren und den vorhandenen Code zu bereinigen, um ihn auf das von Ihnen erwähnte Problem zu konzentrieren. Wenn ich es nicht richtig aufgeräumt habe, kann ich es gerne weiter bearbeiten oder ausrollen. – pstrjds

Antwort

2

Wenn Sie C99 verwenden, haben Sie Zugriff auf stdbool.h und können den booleschen Typ verwenden. Wenn nicht, passen Sie diesen entsprechend an, wenn Sie bool ersetzen, wie typedef, #define oder gib einfach 0 und 1 mit int zurück.

Ich mache auch eine Annahme, dass Ihr Array von Strukturen und die Array-Länge Variable global sind, aber wenn sie nicht sind, können Sie nur diese Funktion ändern, um sie als Argumente übergeben.

bool checkForValue(int numeroToSearch) // Guessing int, but change as needed 
{ 
    int i; 
    for (i = 0; i < numAlunos; i++) 
    { 
     if(numeroToSearch == vAlunos[i].numero) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

Dann sollten Sie in der Lage sein, es wie folgt zu verwenden:

do 
{ 
    printf("Insert the number you want to search:\n"); 
    number= validar_insert (2150001, 2169999);//check if the input is between this values 

    printf("That number doeste exist.\n"); 
    printf("Enter another number.\n"); 
}while (!checkForValue(numero)) 
+0

Ich bekomme alles, was Sie gesagt haben, außer auf Sache: Wie kann ich die "numeroToSearch" bekommen, um es in der checkForValue-Funktion zu verwenden? Ich würde es von der Funktion zurückgeben, wo ist die Schleife, richtig? I –

+0

@NelsonSilva - Sie übergeben es an die Funktion. Wenn Sie sich den do-while-Code anschauen, den ich gepostet habe, sehe ich, dass ich "numero" passiere. Ich habe es in der Funktion "numeroToSearch" genannt, um klar zu machen, was es war. Die do-while-Schleife, die ich hinzugefügt habe, wird direkt aus Ihrem Beispielcode übernommen. Das einzige, was ich getan habe, war die for-Schleife, die Sie in der Bedingung do-while aufgelistet hatten, und verschoben sie in eine Funktion, die ich dann aufgerufen habe die Weile. – pstrjds

1

Wenn Sie nichts dagegen haben einen Compiler-Erweiterung verwenden, sowohl GCC und Clang statement-expressions bereitzustellen, die innerhalb der Bedingung eingebettet werden können:

do { 
    printf("Insert the number you want to search:\n"); 
    numero = getInputFromUser(); 
} while (({ 
    int i = 0; 

    while(i < numAlunos && vAlunos[i] != numero) 
     ++i; 

    i == numAlunos; // "return value" of the statement-expressions 
})); 

See it live on Coliru

Verwandte Themen