Heim > Backend-Entwicklung > C++ > Warum überspringt „getline()' die Eingabe nach der Verwendung von „cin'?

Warum überspringt „getline()' die Eingabe nach der Verwendung von „cin'?

Barbara Streisand
Freigeben: 2024-12-08 19:21:10
Original
844 Leute haben es durchsucht

Why Does `getline()` Skip Input After Using `cin`?

Adressieren von Eingabeüberspringen in getline()

Bei der Verwendung der getline()-Funktion innerhalb eines Programms ist es wichtig, sich einer Gemeinsamkeit bewusst zu sein Problem: Nach der Eingabe einer Zahl wird sofort eine Folgeeingabe angezeigt. Dieses Verhalten kann aufgrund des Zeilenumbruchzeichens auftreten, das nach Eingabe der Zahl im Eingabestream verbleibt.

Sehen wir uns ein konkretes Beispiel an:

int number;
string str;
int accountNumber;

cout << "Enter number: ";
cin >> number;
cout << "Enter name: ";
getline(cin, str);
cout << "Enter account number: ";
cin >> accountNumber;
Nach dem Login kopieren

Bei der Ausführung verhält sich dieser Code unerwartet. Nach der Eingabe der Nummer wird sofort „Kontonummer eingeben“ ausgegeben, ohne dass der Benutzer mit getline(cin, str) einen Namen eingeben kann.

Der Grund für dieses Verhalten liegt in der Art und Weise, wie getline() die Eingabe liest. Es liest die gesamte Zeile, einschließlich des Zeilenumbruchzeichens. Wenn Sie die Zahl eingeben und die Eingabetaste drücken, bleibt die neue Zeile im Eingabestream. Wenn getline() aufgerufen wird, liest es diese neue Zeile und kehrt zurück, ohne auf eine andere Eingabe zu warten. Dies führt dazu, dass das Programm die Eingabeaufforderung „Namen eingeben:“ überspringt.

Um dieses Problem zu beheben, können Sie den Manipulator std::ws verwenden, um alle führenden Leerzeichen, einschließlich des Zeilenumbruchzeichens, zu überspringen, bevor Sie getline( ). Hier ist der aktualisierte Code:

cout << "Enter number: ";
cin >> number;
cout << "Enter name: ";
cin >> std::ws;
getline(cin, str);
cout << "Enter account number: ";
cin >> accountNumber;
Nach dem Login kopieren

Mit dieser Änderung hält das Programm ordnungsgemäß an der Eingabeaufforderung „Namen eingeben:“ an und ermöglicht dem Benutzer die Eingabe eines Namens, bevor er fortfährt.

Das obige ist der detaillierte Inhalt vonWarum überspringt „getline()' die Eingabe nach der Verwendung von „cin'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage