2016-07-12 13 views
0

Ich weiß nicht, wie ich verhindern kann, dass mein Sentinel-Wert in mein Array eingelesen wird, was zu einem Fehler bei meiner Gesamt- und Durchschnittsberechnung führt. Kann jemand helfen? HierWie kann ich verhindern, dass ein Sentinel-Wert in ein Array gelesen wird, wenn die Gesamt- und Durchschnittswerte des Arrays ermittelt werden?

ist die while-Schleife:

while (grade != -1) 
{ 
    cin >> grade; 
    gradesArray[count] = grade; 
    total += gradesArray[count]; 
    average = total/count; 
    count++; 
} 

cout << "You have entered " << count << " grades." << endl; 
cout << "The average of these grades is " << average << endl; 
+4

Uh, testen Sie es, bevor Sie es einfügen. – kfsone

+0

Und wenn Sie ein Array mit fester Länge verwenden, stellen Sie sicher, dass "count" nicht die Grenzen des Arrays überschreitet (und dass Sie "count" * erhöhen, bevor * Sie den neuen "Durchschnitt" berechnen). Andernfalls verwenden Sie stattdessen ein dynamisches Array wie 'std :: vector'. –

Antwort

3

while (std::cin >> grade && grade != -1)

+0

Das funktioniert definitiv, aber aus irgendeinem Grund kommt mein Durchschnitt zu hoch. Wenn ich 5 aufeinanderfolgende 23s gebe und mein Durchschnitt kommt als 28.5 heraus ... Irgendeine Idee, warum? –

+1

Berechnen Sie den Wert, nachdem Sie die Anzahl erhöht haben. –

-1

Hier ist mein modifizierten Code, aber der Durchschnitt gibt einen Mittelwert, der zu hoch ist.

#include<iostream> 
using namespace std; 

int main() 
{ 
int count = 0, grade = 0; 
double total = 0, average; 
const int numGrades = 20; 
int gradesArray[numGrades]; 

cout << "Welcome to the grade calulator!" << endl; 
cout << "Enter up to twenty grades, when done enter -1: " << endl; 


while (cin >> grade && grade != -1) 
{ 
    gradesArray[count] = grade; 
    total += gradesArray[count]; 
    average = total/count; 
    ++count; 
} 

cout << "You have entered " << count << " grades." << endl; 
cout << "The average of these grades is " << average << endl; 

system("pause"); 
return 0; 
}