std:: getline
|
Definiert im Header
<string>
|
||
|
template
<
class
CharT,
class
Traits,
class
Allocator
>
std::
basic_istream
<
CharT, Traits
>
&
|
(1) | |
|
template
<
class
CharT,
class
Traits,
class
Allocator
>
std::
basic_istream
<
CharT, Traits
>
&
|
(2) | (seit C++11) |
|
template
<
class
CharT,
class
Traits,
class
Allocator
>
std::
basic_istream
<
CharT, Traits
>
&
|
(3) | |
|
template
<
class
CharT,
class
Traits,
class
Allocator
>
std::
basic_istream
<
CharT, Traits
>
&
|
(4) | (seit C++11) |
getline
liest Zeichen aus einem Eingabestrom und speichert sie in einem String:
getline
das
failbit
setzt und zurückkehrt.
getline
setzt
failbit
und kehrt zurück.
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:
-
Ein expliziter unnötiger initialer Aufruf von
getline. - Entfernen aufeinanderfolgender Leerzeichen mit std:: cin >> std:: ws .
- Ignorieren aller verbleibenden Zeichen in der Eingabezeile mit cin. ignore ( std:: numeric_limits < std:: streamsize > :: max ( ) , ' \n ' ) ; .
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>
)
|