Heim > Backend-Entwicklung > C++ > Warum verhält sich getline() in einer Schleife nach der Verwendung von „>>' unerwartet?

Warum verhält sich getline() in einer Schleife nach der Verwendung von „>>' unerwartet?

Barbara Streisand
Freigeben: 2024-11-25 16:51:12
Original
279 Leute haben es durchsucht

Why Does getline() Behave Unexpectedly in a Loop After Using `>>`? 
>`? " />

getline() und Konsoleneingabe in C

In C wird die Funktion getline() normalerweise verwendet, um eine Textzeile aus einem Stream zu extrahieren Bei mehrmaliger Verwendung in einer Schleife kann es jedoch zu unerwartetem Verhalten kommen.

Problem:
Beim Versuch Sammeln Sie Benutzereingaben mit getline() für Zeichenfolgen und >> für Ganzzahlen und Doppelzahlen. Stattdessen springt der Konsolencursor nach dem zweiten getline()-Aufruf zur nächsten Eingabeaufforderung.

Erklärung:
Das Problem ist auf die Vermischung von getline() und >> zurückzuführen liest die Eingabe, bis sie ein Nicht-Leerzeichen erreicht. Es bleibt jedoch ein Newline-Zeichen (n) im Eingabestream.

Wenn getline() nach >> aufgerufen wird, liest es das Newline-Zeichen als die leere Zeichenfolge, was zum Unerwünschten führt Verhalten.

Lösung:

  1. Operator >> konsequent verwenden: Wenn alle Eingaben mit >> , bleiben Sie bei dieser Methode.
  2. Verwenden Sie getline() konsequent: Wenn die Eingabe Zeichenfolgen oder eine Mischung aus Typen umfasst, verwenden Sie ausschließlich getline() und analysieren Sie die Zahlen aus den abgerufenen Zeichenfolgen. Dies kann mit einem Stringstream oder einer Bibliothek wie Boost erfolgen.
string line;
getline(cin, line);
int value = stoi(line); // Parse the number from the string
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum verhält sich getline() in einer Schleife nach der Verwendung von „>>' unerwartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage