std:: getline
Defined in 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) | (since 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) | (since C++11) |
getline
reads characters from an input stream and places them into a string:
getline
sets
failbit
and returns.
Parameters
input | - | the stream to get data from |
str | - | the string to put the data into |
delim | - | the delimiter character |
Return value
input
Notes
When consuming whitespace-delimited input (e.g.
int
n
;
std::
cin
>>
n
;
) any whitespace that follows, including a newline character, will be left on the input stream. Then when switching to line-oriented input, the first line retrieved with
getline
will be just that whitespace. In the likely case that this is unwanted behaviour, possible solutions include:
-
An explicit extraneous initial call to
getline
. - Removing consecutive whitespace with std:: cin >> std:: ws .
- Ignoring all leftover characters on the line of input with cin. ignore ( std:: numeric_limits < std:: streamsize > :: max ( ) , ' \n ' ) ; .
Example
The following example demonstrates how to use the
getline
function to read user input, and to process a stream line by line, or by parts of a line using the
delim
parameter.
#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'; }
Possible output:
What is your name? John Q. Public Hello John Q. Public, nice to meet you. The sum is 28. a b c d
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 91 | C++98 |
getline
did not behave as an unformatted input function
|
behaves as an unformatted input function |
See also
extracts characters until the given character is found
(public member function of
std::basic_istream<CharT,Traits>
)
|