2016-07-06 11 views
0

Ich blende aus und kann mir nicht vorstellen, wie der Name der Person mit der höchsten Note im Array angezeigt werden soll. Dies ist der Code, den ich habe, es funktioniert alles außer dem Anzeigen des Namens der höchsten Note, es stürzt ab, wenn es zu diesem Teil kommt.Anzeige des Namens für die höchste Nummer im Array

#include <iostream> 
#include <string> 
#include <iomanip> 
using namespace std; 

int main() 
{ 

const int STUDENTS = 5; 
string studentGrade[STUDENTS] = { "Amanda Baynes", "Victor Hughes", "Scott Collins", "Lori Macbeth ", "Manny Lopez " }; 
int grades[STUDENTS], count, highest; 
highest = grades[0]; 

for (count = 0; count < STUDENTS; count++) 
{ 
    cout << "Enter score for student " << (studentGrade[count]) << ": "; 
    cin >> grades[count]; 

} 

cout << endl; 

for (count = 0; count < STUDENTS; count++) 
{ 
    for (count = 0; count < STUDENTS; count++) 
     cout << studentGrade[count] << setw(10) << right << grades[count] << endl; 
} 

for (count = 0; count < STUDENTS; count++) 
{ 
    if (grades[count] > highest) 
     highest = grades[count]; 
    studentGrade[count] = highest; 
} 
cout << "The highest score " << highest << " is obtained by " << studentGrade[count] << endl; 


return 0; 
} 
+1

'studentGrade [count] = höchste;' Dies sollte nicht kompilieren. Für was, glaubst du, brauchst du das überhaupt? Was Sie brauchen, ist eine zusätzliche Variable, die sich an den Wert von "count" erinnert, bei dem die höchste Note erreicht wurde. –

+0

Eigentlich kompiliert es. Es gibt ein 'operator = (char)' overload, was das letztendlich zum Aufruf bringt. –

+0

Sie sollten nur eine separate Variable behalten, um den Namen des Schülers mit der höchsten Note zu verfolgen. Dieser Code hat einen Segmentierungsfehler, weil er beim letzten Cout vom Ende seines studentGrade-Arrays abläuft. – ifma

Antwort

3
studentGrade[count] = highest; 

Wenn Sie explain this line of code to your rubber duck versucht, Ihre Gummi-Ente Sie eine Frage fragen würde. Vorausgesetzt, dass:

1) Diese Zeile wird für jede Iteration der Schleife ausgeführt, ist es nicht in der unmittelbar vorhergehenden if Anweisung.

2) studentGrade ist ein Array von Schülernamen,

3) highest ist die höchste Punktzahl auf dem Laufenden.

Ihre Gummiente möchte, dass Sie erklären, warum Sie versuchen, den Namen jedes Schülers durch die höchste erreichte Punktzahl zu ersetzen. Kannst du diese Frage beantworten?

Neben der Tatsache, dass dies der falsche Weg ist, macht es in erster Linie keinen Sinn.

Sie möchten nicht den Namen jedes Schülers durch irgendetwas ersetzen. Sie wollen nur wissen, welcher Schüler die höchste Punktzahl hat. All dieser Code ist dabei, die höchste Punktzahl zu finden, aber er verfolgt nicht, welcher Student ihn hat.

highest = grades[0]; 

Das fängt den Ball ins Rollen, indem diesen Schüler # vorausgesetzt 0 die höchste Punktzahl hat. Dies ist ein sehr vernünftiger und logischer Ausgangspunkt. Aber Sie müssen sich auch daran erinnern, dass es der Student # 0 mit der höchsten Punktzahl ist. So müssen Sie auch den Überblick über sie halten:

int highest_student=0; 

Nun, wenn Sie für die höchste Punktzahl suchen, zusätzlich zu der höchsten Punktzahl der Aufnahme müssen Sie aufzeichnen, welche Schüler die höchste Punktzahl hat:

for (count = 0; count < STUDENTS; count++) 
{ 
    if (grades[count] > highest) 
    { 
     highest = grades[count]; 
     highest_student = count; 
    } 
} 

Und jetzt, am Ende, wird der Student mit der höchsten Punktzahl Student #highest_student sein.

Und deine Gummiente wird dir keine unangenehmen Fragen mehr stellen (wie zum Beispiel willst du die Namen aller Schüler ersetzen).

1

Sie führen das Ende Ihrer Array mit dieser Linie

cout << "The highest score " << highest << " is obtained by " << studentGrade[count] << endl; 

Bis es diese Zeile erreicht ab, count größer ist als die Länge Ihres studentGrade Array.

Der einfachste Weg, um Ihr Problem zu beheben, ist, nur eine separate Variable zu haben, um den Namen zu verfolgen, der mit der höchsten Note verbunden ist. Dann drucken Sie diese anstelle von studentGrade[count] (nicht sicher, was Sie hier überhaupt versuchen).

Auch das Initialisieren dieser Variablen highest = grades[0]; führt zu undefiniertem Verhalten (was war der Denkprozess hier?), Weil grades nicht initialisiert ist. Sie sollten es auf einen konkreten Wert wie 0 setzen.

0

Beachten Sie zunächst, dass Sie den Wert von grades[0] in den Variablen nehmen höchste aufgerufen, bevor die Eingabe von Noten in das Array nehmen, die in einigen Fällen fehlbar erweisen könnten. Jetzt

, betrachten die if-Anweisung

if (grades[count] > highest) 
    highest = grades[count]; 
studentGrade[count] = highest; //this is a syntax error 
           //since base type of the array 
          //gradeStudent is String and that of 
          //variable highest is int 

Sie erhalten tatsächlich den höchsten Grad in den Variablen höchsten aber die Aussage studentGrade[count] = highest erstens ist syntaktisch falsch und zweitens, selbst wenn es syntaktisch korrekt, wird jedes Mal in der Schleife ausgeführt (da es außerhalb der if-Anweisung ist: Sie haben es wahrscheinlich vergessen, es in die geschweifte Klammern der if-Anweisung zu setzen), wodurch die Werte von Grad array verfälscht werden.

I empfehlen diese Logik: in den jeweiligen Arrays, um die Namen und Typen der Schüler hat, holen die index von dem höchsten Wert (dh höchsten Grad) in den Qualitäten Array, also die Position in der Anordnung, in der die höchste Note liegt. Das gleiche wird der Index des Schülers sein, der die höchste Note bekommt.

Betrachten Sie den folgenden Code.

/* get the input of grades in grades array */ 
highest = 0; //assuming that highest grade lies at index 0 
for(count = 0; count < STUDENTS; count++){ 
    if(grades[count] > grades[highest]) 
     highest = count; 
} 
cout << "The student with the max grade is " << studentGrade[highest]; 

Hoffe das löst Ihr Problem.

Verwandte Themen