11 Stimmen

Problem der doppelten Verwendung von cin

Hier ist der Code:

string str;
cin>>str;
cout<<"first input:"<<str<<endl;
getline(cin, str);
cout<<"line input:"<<str<<endl;

Das Ergebnis ist, dass getline nie auf Benutzereingaben wartet, so dass die zweite Ausgabe immer leer ist.

Nachdem ich einige Zeit damit verbracht habe, habe ich festgestellt, dass nach dem ersten Aufruf "cin>>str", es scheint ' \n ' ist immer noch in cin gespeichert (mit cin.peek() zur Überprüfung), was getline sofort beendet. Die Lösung besteht darin, eine weitere Zeile zwischen der ersten und der zweiten Verwendung einzufügen: cin.ignore(numeric_limits::max(), '\n');

Ich verstehe aber immer noch nicht, warum die \n ' nach dem ersten Anruf dort gelassen? Was bewirkt istream& operator>> wirklich?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X