Heim  >  Artikel  >  Backend-Entwicklung  >  Warum funktioniert „getline()“ nicht, nachdem der Extraktionsoperator von „cin“ verwendet wurde?

Warum funktioniert „getline()“ nicht, nachdem der Extraktionsoperator von „cin“ verwendet wurde?

DDD
DDDOriginal
2024-11-11 15:51:02147Durchsuche

Why Doesn't `getline()` Work After Using `cin`'s Extraction Operator?

Verhalten von getline() verstehen

Die Funktion getline() in C wird verwendet, um Zeichen aus der Standardeingabe zu lesen, bis ein Zeilenumbruchzeichen angezeigt wird angetroffen. Entwickler können jedoch auf unerwartete Probleme stoßen, wenn sie getline() nach dem Extraktionsoperator von cin (>>) verwenden.

Problembeschreibung

Benutzer stellen möglicherweise fest, dass ihr Code fehlerhaft ist Es wird nicht angehalten, Benutzereingaben zu empfangen, wenn versucht wird, vom Benutzer bereitgestellte Nachrichten mit getline() zu erfassen. Die zugrunde liegende Ursache hängt mit dem Verhalten des cin-Extraktionsoperators zusammen.

Lösung: Leeren des Zeilenumbruchzeichens

Nachdem der cin-Extraktionsoperator zum Lesen von Daten verwendet wurde, hinterlässt er eine neue Zeile Zeichen (n) im Eingabepuffer. Wenn getline() unmittelbar danach aufgerufen wird, stößt es auf dieses Newline-Zeichen und hört sofort auf zu lesen.

Um dieses Problem zu beheben, muss man das Newline-Zeichen aus dem Puffer leeren, bevor man getline() aufruft. Dies kann durch die Verwendung von cin.ignore() wie folgt erreicht werden:

string messageVar;
cout << "Type your message: ";
cin.ignore();
getline(cin, messageVar);

Durch das Einfügen von cin.ignore() wird das Newline-Zeichen verworfen, sodass getline() die Eingaben des Benutzers wie beabsichtigt lesen kann. Diese Technik stellt sicher, dass sowohl der Cin-Operator als auch getline() reibungslos nacheinander funktionieren.

Das obige ist der detaillierte Inhalt vonWarum funktioniert „getline()“ nicht, nachdem der Extraktionsoperator von „cin“ 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