Namespaces
Variants

std:: getline

From cppreference.net
std::basic_string
Definiert im Header <string>
template < class CharT, class Traits, class Allocator >

std:: basic_istream < CharT, Traits > &
getline ( std:: basic_istream < CharT, Traits > & input,

std:: basic_string < CharT, Traits, Allocator > & str, CharT delim ) ;
(1)
template < class CharT, class Traits, class Allocator >

std:: basic_istream < CharT, Traits > &
getline ( std:: basic_istream < CharT, Traits > && input,

std:: basic_string < CharT, Traits, Allocator > & str, CharT delim ) ;
(2) (seit C++11)
template < class CharT, class Traits, class Allocator >

std:: basic_istream < CharT, Traits > &
getline ( std:: basic_istream < CharT, Traits > & input,

std:: basic_string < CharT, Traits, Allocator > & str ) ;
(3)
template < class CharT, class Traits, class Allocator >

std:: basic_istream < CharT, Traits > &
getline ( std:: basic_istream < CharT, Traits > && input,

std:: basic_string < CharT, Traits, Allocator > & str ) ;
(4) (seit C++11)

getline liest Zeichen aus einem Eingabestrom und speichert sie in einem String:

1,2) Verhält sich wie UnformattedInputFunction , mit der Ausnahme, dass input. gcount ( ) nicht beeinflusst wird. Nach dem Konstruieren und Überprüfen des Wächterobjekts führt es Folgendes aus:
1) Ruft str. erase ( ) auf.
2) Extrahiert Zeichen aus input und fügt sie an str an, bis eines der folgenden Ereignisse eintritt (geprüft in der aufgeführten Reihenfolge)
a) End-of-File-Zustand auf input , in welchem Fall getline das eofbit setzt.
b) das nächste verfügbare Eingabezeichen ist delim , wie getestet durch Traits :: eq ( c, delim ) , in welchem Fall das Trennzeichen aus input extrahiert wird, aber nicht an str angehängt wird.
c) str. max_size ( ) Zeichen gespeichert wurden, in welchem Fall getline das failbit setzt und zurückkehrt.
3) Falls aus irgendeinem Grund keine Zeichen extrahiert wurden (nicht einmal das verworfenen Trennzeichen), getline setzt failbit und kehrt zurück.
3,4) Gleich wie getline ( input, str, input. widen ( ' \n ' ) ) , das heißt, das Standardtrennzeichen ist das Zeilenendezeichen.

Inhaltsverzeichnis

Parameter

input - der Stream, von dem Daten gelesen werden
str - die Zeichenkette, in die Daten geschrieben werden
delim - das Trennzeichen

Rückgabewert

input

Hinweise

Beim Einlesen von durch Leerzeichen getrennten Eingaben (z.B. int n ; std:: cin >> n ; ) wird jedes nachfolgende Leerzeichen, einschließlich eines Zeilenumbruchzeichens, im Eingabestrom verbleiben. Beim Wechsel zu zeilenorientierter Eingabe wird dann die erste mit getline abgerufene Zeile genau dieses Leerzeichen sein. Für den wahrscheinlichen Fall, dass dieses Verhalten unerwünscht ist, gehören zu den möglichen Lösungsansätzen:

Beispiel

Das folgende Beispiel demonstriert, wie die getline Funktion verwendet wird, um Benutzereingaben zu lesen, und um einen Stream zeilenweise oder in Teilen einer Zeile unter Verwendung des delim Parameters zu verarbeiten.

#include <iostream>
#include <sstream>
#include <string>
int main()
{
    // greet the user
    std::string name;
    std::cout << "What is your name? ";
    std::getline(std::cin, name);
    std::cout << "Hello " << name << ", nice to meet you.\n";
    // read file line by line
    std::istringstream input;
    input.str("1\n2\n3\n4\n5\n6\n7\n");
    int sum = 0;
    for (std::string line; std::getline(input, line);)
        sum += std::stoi(line);
    std::cout << "\nThe sum is " << sum << ".\n\n";
    // use separator to read parts of the line
    std::istringstream input2;
    input2.str("a;b;c;d");
    for (std::string line; std::getline(input2, line, ';');)
        std::cout << line << '\n';
}

Mögliche Ausgabe:

What is your name? John Q. Public
Hello John Q. Public, nice to meet you.
The sum is 28.
a
b
c
d

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 91 C++98 getline verhielt sich nicht wie eine unformatierte Eingabefunktion verhält sich wie eine unformatierte Eingabefunktion

Siehe auch

extrahiert Zeichen bis zum Auffinden des angegebenen Zeichens
(öffentliche Elementfunktion von std::basic_istream<CharT,Traits> )