Heim >Backend-Entwicklung >C++ >Warum schlägt „getline()' fehl, nachdem „cin' mit „>>' in C verwendet wurde?

Warum schlägt „getline()' fehl, nachdem „cin' mit „>>' in C verwendet wurde?

DDD
DDDOriginal
2024-11-12 04:59:02783Durchsuche

Why Does `getline()` Fail After Using `cin` with `>>` in C ? 
>` 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!

Stellungnahme:
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