Heim > Backend-Entwicklung > C++ > Warum überspringt „getline()' in C manchmal Benutzereingaben und wie kann ich das beheben?

Warum überspringt „getline()' in C manchmal Benutzereingaben und wie kann ich das beheben?

Mary-Kate Olsen
Freigeben: 2024-12-09 07:42:08
Original
473 Leute haben es durchsucht

Why Does `getline()` in C   Sometimes Skip User Input, and How Can I Fix It?

getline() in C: Umgang mit Zeilenpufferung

In C wird getline() verwendet, um Eingaben aus dem Standard-Eingabestream cin zu lesen bis ein Zeilenumbruchzeichen auftritt. Wenn es jedoch in einem Programm verwendet wird, in dem Benutzereingaben angefordert werden, kann es zu unerwartetem Verhalten führen.

Beachten Sie den folgenden Codeausschnitt:

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

Wenn dieses Programm ausgeführt wird, wird es Ihnen möglicherweise auffallen dass das Programm Sie nach Eingabe der ersten Nummer sofort zur Eingabe der Kontonummer auffordert, ohne auf die Eingabe Ihres Namens warten zu müssen. Dies liegt daran, dass getline() das verbleibende Newline-Zeichen aus dem Eingabepuffer liest.

Um dieses Problem zu vermeiden, können Sie std::ws (whitespace) vor getline() verwenden, um alle Leerzeichen und Newline-Zeichen aus dem zu überspringen Eingabestrom. Dadurch wird sichergestellt, dass getline() die Eingabe ab dem nächsten Nicht-Leerzeichen liest:

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

Durch die Einbindung dieses Schritts fordert das Programm Sie korrekt zur Eingabe Ihres Namens auf, bevor es mit der nächsten Eingabe fortfährt.

Das obige ist der detaillierte Inhalt vonWarum überspringt „getline()' in C manchmal Benutzereingaben und wie kann ich das beheben?. 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