std::getline
<string>
std::basic_istream <CharT, Traits>&
getline( std::basic_istream <CharT, Traits>& input,
std::basic_istream <CharT, Traits>&
getline( std::basic_istream <CharT, Traits>&& input,
std::basic_istream <CharT, Traits>&
getline( std::basic_istream <CharT, Traits>& input,
std::basic_istream <CharT, Traits>&
getline( std::basic_istream <CharT, Traits>&& input,
getline
reads characters from an input stream and places them into a string:
getline
sets failbit and returns.[edit] Parameters
[edit] Return value
input
[edit] 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');.
[edit] 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
[edit] 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 |