Heim >Backend-Entwicklung >C++ >Warum überspringt „getline()' in C manchmal Benutzereingaben und wie kann ich das beheben?
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;
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); ...
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!