2016-07-24 3 views
0

Ich versuche, die Anzahl der in mein Array eingegebenen Klassen zurückzugeben, indem ich es von einer Funktion zurückgebe, die auch das Array füllen sollte. Mit diesen Daten möchte ich dann das Array an eine andere Funktion übergeben und die niedrigsten, höchsten und durchschnittlichen Bewertungen lesen, die in das Array geschrieben wurden. Das Programm, das ich geschrieben habe, ist unten. Ich bin mir nicht sicher, wo ich falsch liege.Wie bekomme ich die Gesamtzahl der Integer, die in ein Array eingegeben wurden, das von einer Funktion in C++ zurückgegeben wurde, sowie die niedrigste höchste und durchschnittliche Punktzahl?

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

int getGrades(int[], int); 
void calcStats(int[], int, int&, int&, double&); 

int main() 
{ 
double av; 
int count; 
const int numGrades = 20; 
int grade[numGrades]; 
int low = grade[0]; 
int high = grade[0]; 

count = getGrades(grade, numGrades); 

calcStats(grade, count, low, high, av); 

cout << "You have entered " << count << " grades." << endl; 
cout << "The lowest score was " << low << "." << endl; 
cout << "The highest score was " << high << "." << endl; 
cout << "The average of all the scores was " << av << "." << endl; 

system("pause"); 
return 0; 
} 

int getGrades(int grade[], int size) 
{ 
int gr, count = 0; 
cout << "Please enter up to 20 grades and -1 when finished." << endl; 
while (cin >> gr && gr != -1) 
{ 
    grade[count] = gr; 
    count++; 
} 
return count; 
} 
void calcStats(int grade[], int S2, int &low, int &high, double &av) 
{ 
for (int count = 1; count < S2; count++) 
    if (grade[count] < low) 
    { 
     low = grade[count]; 
    } 
for (int count = 1; count < S2; count++) 
    if (grade[count] > high) 
    { 
     high = grade[count]; 
    } 
int total = 0; 
for (int count = 0; count < S2; count++) 
    total += grade[count]; 
av = total/S2; 
} 

Beispiel für eine Ausgabe als das Programm liest nun:

Please enter up to 20 grades and -1 when finished. 
45 
45 
45 
45 
45 
-1 
You have entered 5 grades. 
The highest score was 45. 
The lowest score was -85679. 
The average of all the scores was 45. 

Die Anzahl der Noten in diesem Szenario sollten 5. Die höchste sein, und die niedrigste durchschnittliche sollten alle 45.

+0

Ich würde vorschlagen, dass Sie Ihre Frage bearbeiten, um auch die Ausgabe eines Probenlaufs (z. B. von 5 Einträgen) einzuschließen. – clusterdude

+0

Danke. Ich habe einen einfachen Testlauf gemacht. –

Antwort

1
int count = 0, low = 0, high = 0; 

// ... 

cout << "You have entered " << count << " grades." << endl; 

Es gibt nichts im Code, der diesem count etwas zuordnet, deshalb wird hier der Wert 0 angezeigt.

Die Anzahl der eingegebenen Noten wird von getGrades() zurückgegeben. Dies ist korrekt, jedoch ignoriert main() den Rückgabewert von getGrades() vollständig und kann count nicht zugewiesen werden. Nur weil getGrades() die Anzahl der Noten zurückgibt, bedeutet dies nicht, dass count automatisch aktualisiert wird.

const int numGrades = 20; 

calcStats(grade, numGrades, low, high, av); 

main() gibt numGrades zu calcStats(), da die Anzahl der Noten zu berechnen. Es wird natürlich immer 20 sein, und calcStats() wird immer denken, dass es 20 Grade zu berechnen gibt, anstelle der tatsächlichen Anzahl von Noten, die eingegeben wurden. Somit sind die berechneten Ergebnisse vollständiger Müll.

low = count + 1; 

high = count + 1; 

low und high erhalten auf die Anzahl der niedrigsten oder höchsten Grad eingestellt. Wenn also die fünfte Klasse die niedrigste Klasse ist, also 13, wird low auf 5 gesetzt.

der Ausgang des Hauptes erwartet jedoch selbst den Wert des tatsächlichen Grades zu zeigen, 13, statt der Zahl, 5.

Außerdem, wenn der niedrigste oder der höchste Grad war die allererste eingegeben, calcGrades() wird nicht gesetzt low oder high, überhaupt.

+0

Okay, also habe ich ein paar Änderungen vorgenommen, aber ich scheine immer noch einen Fehler mit der niedrigen Ganzzahl zu bekommen ... Nicht sicher warum, denn das Auslesen ist genau dasselbe wie die hohe Ganzzahl neben dem Kleiner als Vorzeichen. Irgendwelche Vorschläge dort? –

+1

'low' und' high' werden auf den Wert von 'grade [0]' initialisiert, noch bevor die Noten selbst eingegeben werden. Mit anderen Worten: "den Wagen vor das Pferd stellen". Johnny Carsons "Carnac, the Magnificent" -Gag kommt auch in den Sinn. –

+0

Danke. Ich lerne immer noch die Nuancen der Codierung. Ich schätze die Hilfe. :) –

Verwandte Themen