Heim >Backend-Entwicklung >C++ >Warum schlägt „getline()' fehl, nachdem „cin' mit „>>' in C verwendet wurde?
>` in C ? " />
getline() in C verstehen
Bei der Verwendung der getline()-Methode zum Abrufen von Benutzereingaben in C ist es wichtig, sich an ein häufiges Problem zu erinnern entsteht. Bei Verwendung unmittelbar nach der Verwendung von cin mit dem >>-Operator kann es sein, dass getline() Benutzereingaben nicht korrekt erfasst.
Das Problem:
Lassen Sie uns darüber nachdenken Das folgende Code-Snippet:
string messageVar; cout << "Type your message: "; getline(cin, messageVar);
In diesem Code wird erwartet, dass getline() Benutzereingaben liest und in messageVar speichert. In bestimmten Fällen stoppt getline() jedoch vorzeitig und lässt messageVar leer .
Die Lösung:
Um dieses Problem zu beheben, ist es notwendig, das im Eingabepuffer verbleibende Zeilenumbruchzeichen aus dem vorherigen cin >>-Vorgang zu löschen . Dies kann mit cin.ignore() erreicht werden:
string messageVar; cout << "Type your message: "; cin.ignore(); getline(cin, messageVar);
Grund für das Problem:
Bei Verwendung des >>-Operators wird die Eingabe gelesen Bis ein Leerzeichen (z. B. ein Leerzeichen oder ein Zeilenumbruch) gefunden wird, bleibt das Zeilenumbruchzeichen jedoch im Eingabepuffer, was dazu führt, dass getline() den Lesevorgang stoppt, da es das Zeilenumbruchzeichen als Ende der Eingabe interpretiert. Durch die Verwendung von cin.ignore() wird das Newline-Zeichen aus dem Puffer entfernt, sodass getline() korrekt funktionieren kann.
Das obige ist der detaillierte Inhalt vonWarum schlägt „getline()' fehl, nachdem „cin' mit „>>' in C verwendet wurde?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!