Heim > Artikel > Backend-Entwicklung > Warum bleibt meine C-Funktion „getline()“ hängen, nachdem ich „cin“ verwendet habe?
Verwenden von getline() in C: Fehlerbehebung bei Benutzereingaben
Bei der Verwendung der getline()-Methode zum Abrufen von Benutzereingaben ist es wichtig, dass dies der Fall ist sich einer möglichen Gefahr bewusst. Betrachten Sie den folgenden Code:
string messageVar; cout << "Type your message: "; getline(cin, messageVar);
Obwohl versucht wurde, Benutzereingaben einzuholen, bleibt dieser Code auf unbestimmte Zeit hängen und erfasst nie die gewünschte Nachricht.
Ursache des Problems:
Das Problem ergibt sich aus der Tatsache, dass der Cin >> Der Operator hinterlässt ein Zeilenumbruchzeichen n im Eingabepuffer. Dies wird problematisch für getline(), das Eingaben liest, bis auf eine neue Zeile gestoßen wird. Infolgedessen wird getline() vorzeitig beendet, ohne dass eine Eingabe erfolgt.
Lösung:
Um dieses Problem zu beheben, müssen Sie das Zeilenumbruchzeichen aus dem Eingabepuffer leeren bevor Sie getline() aufrufen. Dies kann mit cin.ignore() erreicht werden:
string messageVar; cout << "Type your message: "; cin.ignore(); getline(cin, messageVar);
Durch Hinzufügen von cin.ignore() wird das im Puffer verbliebene Newline-Zeichen verworfen, sodass getline() wie erwartet funktionieren kann. Es wartet auf Benutzereingaben und erfasst die eingegebene Nachricht, wenn die Eingabetaste gedrückt wird.
Das obige ist der detaillierte Inhalt vonWarum bleibt meine C-Funktion „getline()“ hängen, nachdem ich „cin“ verwendet habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!