2016-06-01 5 views
-1

ich dieses Stück Code aus meiner Übung haben, in denen muss ich:Mit <vector> mit cin und für() Schleife C++

  • einen Schüler hinzufügen mit seinem Namen, ID, Bildungsniveau und 3 Sorten
  • ändern
  • eine Note eines Schülers
  • löschen Student
  • Zeigen Sie eine Liste der zugelassenen Studenten
  • Zeigen Sie eine Liste der repproved Studenten
  • zeigen eine vollständige lis t

So habe ich dies mit Vektoren getan und hier ist mein Code:

int resp = 0; 

vector<int> ids; 
vector<string> names; 
vector<string> levels; 
vector<double> grades1; 
vector<double> grades2; 
vector<double> grades3; 
vector<double> average; 
vector<double> approved; 
vector<double> repproved; 

string name, level; 
int id, elim, id_delete, i=0; 
double grade=0, sum=0; 

do { 

    cout<<"######### OPTIONS MENU #########"<<"\n\n"; 

    cout<<"[1] Add a student"<<"\n"; 
    cout<<"[2] Add grades of a student"<<"\n"; 
    cout<<"[3] Modify grades of a student"<<"\n"; 
    cout<<"[4] Delete a student"<<"\n"; 
    cout<<"[5] Show approved list"<<"\n"; 
    cout<<"[6] Show repproved list"<<"\n"; 
    cout<<"[7] Show the full list"<<"\n"; 
    cout<<"[8] Exit"<<"\n\n"; 

    cin>>resp; 

    switch(resp) { 
     case 1: 
      cout<<"Enter the student's name: \n"; 
      cin.sync(); cin.clear(); 
      getline(cin, name); 
      names.push_back(name); 
      cout<<"Enter the student's id: \n"; 
      cin>>id; 
      ids.push_back(id); 
      cout<<"Enter the student's school level: \n"; 
      cin.sync(); cin.clear(); 
      getline(cin, level); 
      levels.push_back(level); 

      cout<<"Student added"; 

     break; 
     case 2: 
      cout<<"Enter the grade 1 of the student: \n"; 
      cin>>grade; 
      grades1.push_back(grade); 
      cout<<"Enter the grade 2 of the student: \n"; 
      cin>>grade; 
      grades2.push_back(grade); 
      cout<<"Enter the grade 3 of the student: \n"; 
      cin>>grade; 
      grades3.push_back(grade); 

      cout<<"Grades added"; 
     break; 
     case 3: 
      cout<<"Enter the student's id you wish to modify grades on: \n"; 
      cin>>id_delete; 

      for(int i=0; i<ids.size(); i++) { 
       if(id_delete==ids[i]) { 
        id_delete = i; 
        break; 
       } 
      } 

      i=id_delete; 
      cout<<"Enter the new grade 1 of the student: \n"; 
      cin>>grade; 
      grades1[i] = grade; 

      cout<<"Enter the new grade 2 of the student: \n"; 
      cin>>grade; 
      grades2[i] = grade; 

      cout<<"Enter the new grade 3 of the student: \n"; 
      cin>>grade; 
      grades3[i] = grade; 

      cout<<"Grades modified\n"; 

     break; 
     case 4: 
      cout<<"Enter the student's id you wish delete: \n"; 
      cin>>id_delete; 

      for(int i=0; i<ids.size(); i++) { 
       if(id_delete==ids[i]) { 
        id_delete = i; 
        break; 
       } 
      } 

      ids.erase (ids.begin()+(id_delete-1)); 
      names.erase (names.begin()+(id_delete-1)); 
      levels.erase (levels.begin()+(id_delete-1)); 
      grades1.erase (grades1.begin()+(id_delete-1)); 
      grades2.erase (grades2.begin()+(id_delete-1)); 
      grades3.erase (grades3.begin()+(id_delete-1)); 

      cout<<"Student deleted\n"; 

     break; 
     case 5: 
      for(i = 0; i<ids.size(); i++) { 
       average[i] = (grades1[i] + grades2[i] + grades3[i])/3; 
      } 

      for(i = 0; i<ids.size(); i++) { 
       if(average[i] >= 7 && average[i] <= 10) { 
        approved[i] = average[i]; 
       } else { 
         repproved[i] = average[i]; 
        } 

      } 

      for(i = 0; i<ids.size(); i++) { 
       cout<<approved[i]<<endl; 
      } 
     break; 
     case 6: 
      for(i = 0; i<ids.size(); i++) { 
       cout<<repproved[i]<<endl; 
      } 
     break; 
     case 7: 
      for(i = 0; i<ids.size(); i++) { 
       cout<<approved[i]<<endl; 
      } 

      for(i = 0; i<ids.size(); i++) { 
       cout<<repproved[i]<<endl; 
      } 

Aber es wirft "exercise.exe hat aufgehört zu arbeiten" bei der Auswahl von Optionen 5, 6 und 7.

PS. Ich bin ein Anfänger in C++ und es ist meine erste Programmiersprache, leider ...

+0

Fügen Sie den gesamten Code ein. Weißt du, wie man debuggt? Was hast du bisher versucht. – novice

+1

Wenn ich 5 eintippe, ist das allererste, was Ihr Programm danach macht, "Durchschnitt [0] = (Noten1 [0] + Noten2 [0] + Noten3 [0])/3;", aber "Durchschnitt" ist leer , also gibt es keinen Durchschnitt [0]. – immibis

+0

Pastebin der gesamte Code: http://pastebin.com/FcAkhjY1 –

Antwort

0

Der Absturz tritt auf, weil Sie Mitglieder von mehreren Vektoren über ihre Enden hinaus zugreifen.

Zum Beispiel:

for(i = 0; i<ids.size(); i++) { 
    average[i] = (grades1[i] + grades2[i] + grades3[i])/3; 
} 

Sie nie die durchschnittliche Array erweitern, bevor sie zugreifen. Sie erweitern die Notenarrays, aber nur als Reaktion auf bestimmte Benutzereingaben.

Wahrscheinlich möchten Sie jedes Mal, wenn ein Student hinzugefügt wird, Einträge in allen Arrays hinzufügen. Und Sie sollten nach dem Studentenausweis fragen, bevor Sie die Noten hinzufügen, und diesen Fall genau wie Ändern behandeln.

Ein besseres Design wäre die Verwendung einer Karte von Studenten ID zu einer Struktur.

+0

Können Sie mir bitte Ressourcen dafür geben? Danke –

0

AS Vektoren

vector<double> average; 
vector<double> approved; 
vector<double> repproved; 

geschaffen, thier Größe 0 dh sie keine Elemente enthalten keine, so dass, wenn Sie die Elemente der oben genannten Vektoren als Durchschnitt zugreifen [i] zum ersten Mal, das ist nicht im Speicher, so müssen Sie zuerst die durchschnittliche einfügen,

average.push_back((grades1[i] + grades2[i] + grades3[i])/3); 

nicht als

average[i] = (grades1[i] + grades2[i] + grades3[i])/3; 
und auch mit den anderen beiden Vektoren

genehmigt und reapproved

Ich hoffe, Sie sind klar.