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
Barbara StreisandOriginal
2024-11-25 16:51:12280Durchsuche

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

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!

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