2016-04-22 9 views
0

Hallo, ich arbeite an der Klassenarbeit und schreibe eine Funktion, die sowohl die höchsten Punkte als auch den Spielernamen mit den höchsten Punkten zeigt.Eine Struktur in C++ analysieren und nach einem Wert suchen

Hier ist, was ich bisher habe Es funktioniert meist aber Schleifen und beginnt den nächsten Namen in Array zu drucken. Ich habe versucht, eine while-Schleife zu verwenden, konnte aber nicht richtig funktionieren. Vielen Dank im Voraus an alle, die helfen wollen.

double temp = 0; 

for (int i = 0; i < SIZE; i++) 
{ 
    if (player[i].pointsScored > temp) 
    { 
     temp = player[i].pointsScored; 
    } 
} 


for (int i = 0; i < SIZE; i++) 
{ 
    cout << player[i].playerName << ' '; 

    if (temp == player[i].pointsScored) 
    { 
     cout << "scored the highest points with " << temp << " points"; 
    } 
} 
+0

In der zweiten Schleife drucken Sie * immer * unbedingt die Namen aller "Spieler" unbedingt. –

+0

Was stimmt nicht mit der Ausgabe außer dem Drucken alles auf einer Zeile? Sie haben es so programmiert, dass jeder Name gedruckt wird. – LogicStuff

Antwort

0

Hier ist, was ich bisher Es funktioniert vor allem aber geht zurück und beginnt den nächsten Namen in dem Feld zu drucken.

Um dies zu vermeiden, brechen Sie aus der Schleife, sobald Sie den Spieler mit der höchsten Punktzahl finden. Außerdem müssen Sie nicht die Namen aller Spieler ausdrucken, während Sie nach dem Spieler mit der höchsten Punktzahl suchen. Verschieben Sie die Zeile, die den Namen des Players im Block if ausgibt.

double temp = 0; 

for (int i = 0; i < SIZE; i++) 
{ 
    if (player[i].pointsScored > temp) 
    { 
     temp = player[i].pointsScored; 
    } 
} 


for (int i = 0; i < SIZE; i++) 
{ 
    cout << player[i].playerName << ' '; 

    if (temp == player[i].pointsScored) 
    { 
     cout 
     << player[i].playerName << ' ' 
     << "scored the highest points with " << temp << " points"; 

     // No need to loop any more. 
     // Break out of the loop. 
     break; 
    } 
} 

Sie können auch den Index des Spielers mit der höchsten Punktzahl speichern und nur die Informationen dieses Spielers ausdrucken.

int highestScoreIndex = 0; 
double temp = 0; 

for (int i = 0; i < SIZE; i++) 
{ 
    if (player[i].pointsScored > temp) 
    { 
     temp = player[i].pointsScored; 
     highestScoreIndex = i; 
    } 
} 

cout 
    << player[highestScoreIndex].playerName << ' ' 
    << "scored the highest points with " << temp << " points"; 
+0

Vielen Dank, ich fühle mich jetzt blöd wohl der ernste Schlafentzug, den ich dank Finalen genieße. – Brandon

1

Verwenden Sie eine weitere Schleife nicht den Namen des Spielers zu bekommen, in der sich erste Schleife erhalten.

double temp = 0; 
String name=""; 
for (int i = 0; i <= SIZE-1; i++) 
{ 

    if (player[i].pointsScored > temp) 
    { 
     temp = player[i].pointsScored; 
     name = player[i].playerName; 
    } 

} 
cout << name <<" scored the highest points with " << temp << " points"; 

Alternative: (Diese besser als es nutzt weniger Raum & schneller ist)

int temp = 0; 
for (int i = 1; i < SIZE; i++) 
{ 

    if (player[i].pointsScored > player[temp].pointsScored) 
    { 
     temp =i; 
    } 

} 
cout << player[temp].playerName<<" scored the highest points with " << player[temp].pointsScored << " points"; 
+1

Speichern von Index oder 'Player' ist einfacher. Zeigen Sie auch die Ausgabeanweisung an. – LogicStuff

+0

Ja das kann auch getan werden. –

+0

@LogicStuff Alternative Methode aufgesetzt. –

0

Sie Änderungen in der zweiten Schleife machen sollten, wenn Sie den Namen drucken und die Partitur ..

for (int i = 0; i < SIZE; i++) 
{ 



    if (temp == player[i].pointsScored) 
    { 
     cout << player[i].playerName << " "; 

     cout << "scored the highest points with " << temp << " points"; 
     break; 
    } 


} 

und die zweite Lösung ist ..

double temp = 0; 
string tempPlayerName=""; 

for (int i = 0; i < SIZE; i++) 
{ 

     if (player[i].pointsScored > temp) 
     { 

    temp = player[i].pointsScored; 
    tempPlayerName=player[i].playerName; 
} 
} 
cout<<"Player Name who has scored highest points "<<tempPlayerName; 
cout<<" and points are "<<temp;