2016-04-14 5 views
0

Ich habe ein Programm erstellt, mit dem der Benutzer 10 Noten eingeben kann. Ich habe eine while-Schleife verwendet, um Noten im Array zu speichern, aber wenn der Benutzer nur 5 Noten eingeben muss, kann er done eingeben, um das Programm zu beenden.Wie verwende ich eine while-Schleife mit einem Array?

Nachdem die Schleife beendet ist, wird sie berechnet und angezeigt. die höchste Note, die niedrigste Note und die durchschnittliche Note innerhalb des Arrays

Leider, wenn der Benutzer fertig ist, zeigt das Programm den Rest der Notenzeilen, die nicht eingegeben wurden.

Können Sie mir helfen, herauszufinden, wie Sie die while-Schleife stoppen können, um den Rest der nicht bewerteten Noten der Schleife anzuzeigen?

#include <iostream> 
using namespace std; 

int main() 
{ 
const int SIZE = 10; 
int grade[SIZE]; 
int count = 0; 
int lowestGrade; 
int highestGrade; 
bool done = false; 


cout << "This program is limited to entering up to 10 grades." << endl; 

while (grade[count] != done && count < SIZE) 
{ 

    cout << "Enter a grade #" << count + 1 << " or done to quit: "; 
    cin >> grade[count]; 
    count++; 

} 

//LOWEST GRADE 
lowestGrade = grade[0]; 
for (count = 0; count < SIZE; count++) 
    if (grade[count] < lowestGrade) 
    { 
     lowestGrade = grade[count]; 
    } 

//HIGHEST GRADE 
highestGrade = grade[0]; 
for (count = 0; count < SIZE; count++) 
{ 
    if (grade[count] > highestGrade) 
    { 
     highestGrade = grade[count]; 
    } 
} 


//AVERAGE GRADE 
double total = 0; 
double average; 
for (int count = 0; count < SIZE; count++) 
    total += grade[count]; 
average = (total/SIZE); 

cout << endl; 

cout << "Your highest grade is: " << highestGrade << endl; 
cout << "Your lowest grade is: " << lowestGrade << endl; 
cout << "Your average grade is: " << average << endl; 



system("pause"); 
return 0; 

} 
+0

Sehen Sie sich den Code 'cin >> grade [count];'. Wie werden Sie das Wort "fertig" in ein Array schreiben, das für Noten gedacht ist? Vielleicht könnte eine Zahl wie "-1" verwendet werden, um "fertig" zu bedeuten, und dann prüfen, ob die eingegebene Zahl "-1" ist? – PaulMcKenzie

Antwort

1

Hier sind zwei Probleme mit Ihrem Code.

Erstens:

.... 
cout << "Enter a grade #" << count + 1 << " or done to quit: "; 
cin >> grade[count]; 
count++; 
.... 

Der obige Code wird attepmpt Wort lesen in Integer-Variable "done", die Herstellung von 0. Nicht das, was Sie tun möchten!

Zweite:

... 
for (count = 0; count < SIZE; count++) 
... 

-Code oben wird versuchen, alle möglichen Elemente iterieren (SIZE). Sie könnten jedoch weniger als das eingegeben haben! Sie müssen count verwenden, das in der vorherigen Schleife als Ihre Grenze berechnet wurde (und natürlich einen anderen Namen für die Steuervariable in der Schleife verwenden).

0

Verwenden Sie eine andere Variable, um die Anzahl der vom Benutzer eingegebenen Werte zu speichern. Sie können auch eine Zeichenfolge in Ihrem Integer-Array nicht speichern:

std::string input = ""; 
while(count < SIZE) 
{ 
    cout << "Enter a grade #" << count + 1 << " or done to quit: "; 
    getline(cin, input); 
    if(input == "done") 
     break;   
    try 
    { 
     grade[count] = std::stoi(input); 
     count++; 
    } 
    catch(std::invalid_argument) 
    { 
     cout << "not a valid number\n"; 
    } 
} 
int actualsize = count; 

und dann diese Variable verwenden, um Ihre for-Schleifen abbrechen:

for (int i = 0; i < actualsize; i++) 
1

Es gibt ein paar Dinge sind hier zu entpacken.

Grundsätzlich ist die Eingabe, die Sie abrufen, ein Zeichen * und der >> Operator ist das Gießen zu einem int, um in Ihr Array von Noten zu passen.

Als nächstes überprüfen Sie mit grade[count] != done, ob die Ganzzahl in "Grad" bei der ID "count" nicht gleich bool false ist. Dies wird in diesem Fall immer wahr zurückgegeben.

Für Ihren Anwendungsfall, was Sie checken wollen, ist, wenn Sie Ihre Eingabe mit dem char gleich * „done“

Dies kann nur nicht passieren speichert in dem Prädikat der while-Schleife, weil Ihre Klasse Array int.

Daher ist die einfachste Lösung für das Problem meiner Meinung nach zu überprüfen, ob die Eingabe gleich "fertig" ist. Wenn es Sie die getan boolean wahr Ansonsten können wir versuchen, werfen sie in einen int und speichern, dass in dem Grade Array festlegen möchten.

Hier wird die überarbeitete Schleife ist:

while (!done && count < SIZE) 
{ 
    cout << "Enter a grade #" << count + 1 << " or done to quit: "; 

    string input = ""; 
    cin >> input; 

    if (input == "done") 
    { 
     done = true; 
    } 
    else 
    { 
     grade[count] = stoi(input); 
    } 

    count++; 
} 

Das folgende ist etwas außerhalb des Umfangs der Frage, sondern ein Additionnal Vorteil stoi zu verwenden() ist, dass es Eingang ignoriert, die keine Zahl ist, was davor schützt, dass jemand eine ungültige Eingabe wie "Kartoffel" eingibt. Aus diesem Grund habe ich die Eingabe sofort in eine Zeichenfolge umgewandelt.

0

Es gibt zwei einfache Möglichkeiten, um Ihr Problem zu lösen:

  • Sie Strings anstelle von ganzen Zahlen und für den Fall, lesen die Lesezeichenfolge ist „fertig“, um die Schleife zu brechen, sonst, konvertieren Sie die Lesezeichenfolge ein integer, etwas wie folgt:

`` `

// rest of the code 

int total_count = 0; 

while (count < SIZE) { 
    cout << "Enter a grade #" << count + 1 << " or done to quit: "; 
    string temp; 
    cin >> temp; 
    if(temp == "done") { 
    break; 
    } else { 
    grade[count] = stoi(temp); 
    count++; 
    total_count = count; 
    } 
} 

// rest of the code 

` ``

  • Wenn Sie keine Zeichenfolgen verwenden möchten, können Sie unter der Annahme, dass die Notenwerte nicht negativ sind, die Eingabeeingabe beenden, wenn der Benutzer eine negative Zahl eingibt, beispielsweise "-1". Also, müssen Sie etwas tun, wie folgt:

`` `

// rest of the code 

int total_count = 0; 

while (count < SIZE) { 
    cout << "Enter a grade #" << count + 1 << " or -1 to quit: "; 
    int temp; 
    cin >> temp; 
    if(temp == -1) { 
    break; 
    } else { 
    grade[count] = temp; 
    count++; 
    total_count = count; 
    } 
} 

// rest of the code 

` ``

Vergessen Sie auch nicht SIZE von TOTAL_COUNT ersetzen in der Rest der Schleifen, dh diejenigen, die "NIEDRIGSTE GRADE", "HÖCHSTE GRADE" und "DURCHSCHNITTLICHE GRADE" berechnen.

HINWEIS: Sie müssen auch oben #include <string> tun, wenn Sie die erste Option verwenden.

Verwandte Themen