2016-03-26 7 views
0

Ok, also mache ich eine Übung für ein C++ - Programmierbuch, und es fordert mich auf, ein Programm zu machen, das neben diesen Namen Namen und Punkte eingibt, die beide in Vektoren gespeichert sind . Dann, nachdem ich mit der Eingabe fertig bin, werde ich aufgefordert, einen Namen einzugeben, dann wird die entsprechende Punktzahl für diesen Namen gefunden. Ex. Ich gebe "John" ein, es gibt 5 zurück, wenn ich Johns Punktzahl so ansetze.C++ cin >> nicht neu starten

Das Problem, das ich habe, ist, nachdem der Benutzer die Eingabe der Namen und Noten abgeschlossen ist, und mein Programm fordert den Benutzer auf einen Namen eingeben (um die entsprechende Punktzahl zu finden), überspringt den Code einfach über den cin Befehl und geht weiter, mein Programm funktioniert nicht. Ich werde das volle Programm veröffentlichen, dann wird der Teil Ich brauche Hilfe mit:

#include "std_lib_facilities.h" 

int main() 
{ 
vector<string>names; 
vector<int>scores; 
string name = ""; 
int score; 
while(cin >> name && cin >> score) 
{ 
     for(int i = 0; i < names.size(); ++i) // checks all previous words 
     { 
      if(name == names[i]) // if the name is used twice, exit 
      { 
       cout << "Error. Terminating...\n"; 
       exit(4); 
      } 
      else; 
     } 

     names.push_back(name); 
     scores.push_back(score); 
} 

cout << "Enter a name, which I will find the score for. \n"; 
string locateName; 
while(cin >> locateName) // i think the program won't accept the locateName 
{ 

    for(int i = 0; i < names.size(); ++i) 
    { 
     if(locateName == names[i]) 
     { 
      cout << names[i] << "'s score is " << scores[i] << '\n'; 
     } 
     else { cout << "Name not found. \n"; } 
    } 

} 
return 0; 
} 

Hier ist der Teil, der nicht funktioniert:

cout << "Enter a name, which I will find the score for. \n"; 
string locateName; 
while(cin >> locateName) 
{ 

    for(int i = 0; i < names.size(); ++i) 
    { 
     if(locateName == names[i]) 
     { 
      cout << names[i] << "'s score is " << scores[i] << '\n'; 
     } 
     else { cout << "Name not found. \n"; } 
    } 

} 

Insbesondere die while(cin >> locateName). Hier sind einige zusätzliche Informationen: Immer wenn ich die Namen eingeben (John 5 Bob 6 Pete 9) drücke ich STRG + Z dann ENTER, um die cin zu stoppen. Dann endet das Programm. Ist dies (ctrlZ), was die while(cin >> locateName) verursacht, neue Werte nicht zu akzeptieren? Hilfe ist dankbar, danke.

+0

Hier ist ein Hinweis/Idee - wie oft heißt es "Name nicht gefunden"? Nur einmal oder zweimal? (Ich frage das, weil, wenn Sie durch die Schleife, für jedes Element in der Schleife suchen, Sie etwas ausgeben. Wenn Sie nach Ihrem Beispiel suchen, wenn Sie nach Pete suchen, erhalten Sie: "Name nicht gefunden. \ NName nicht gefunden . \ nPetes Bewertung ist 9 \ n ") –

+0

Off-Thema Vorschlag: Teilen Sie nicht die Namen und die Scores in zwei Vektoren eine Struktur, die beide speichert und einen einzelnen Vektor dieser Struktur machen. – user4581301

+0

@ user4581301 Die Übung des Buches sagt, Vektoren zu verwenden. Wir haben noch keine Studien gelernt. – jiggumbob

Antwort

0

STRG + Z wird als Dateiende-Markierung interpretiert. Sobald cin diesen Marker sieht, geht es in einen Fehlerzustand (cin.eof() und cin.fail() wird true, was bedeutet, wird false sein, deshalb stoppt Ihre erste Schleife). In einem Fehlerzustand akzeptiert cin keine weiteren Eingaben.

Um cin in einen guten Zustand zurück zu bekommen, können Sie cin.clear() anrufen. Sobald es wieder in einem guten Zustand ist, wird es erneut Eingaben akzeptieren.

+0

Vielen Dank! Ich wusste nichts über cin.clear() – jiggumbob

Verwandte Themen