std::getline
| Defined in header  <string> | ||
| template< class CharT, class Traits, class Allocator > std::basic_istream<CharT,Traits>& getline( std::basic_istream<CharT,Traits>& input, | (1) | |
| template< class CharT, class Traits, class Allocator > std::basic_istream<CharT,Traits>& getline( std::basic_istream<CharT,Traits>&& input, | (1) | (since C++11) | 
| template< class CharT, class Traits, class Allocator > std::basic_istream<CharT,Traits>& getline( std::basic_istream<CharT,Traits>& input, | (2) | |
| template< class CharT, class Traits, class Allocator > std::basic_istream<CharT,Traits>& getline( std::basic_istream<CharT,Traits>&& input, | (2) | (since C++11) | 
getline reads characters from an input stream and places them into a string:
input.gcount() is not affected. After constructing and checking the sentry object, performs the following:input and appends them to str until one of the following occurs (checked in the order listed)delim, as tested by Traits::eq(c, delim), in which case the delimiter character is extracted from input, but is not appended to str.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 getline function to read user's input and how to process file line by line.
#include <string> #include <iostream> #include <sstream> 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"; }
Possible output:
What is your name? John Q. Public Hello John Q. Public, nice to meet you. The sum is 28
See also
| extracts characters until the given character is found (public member function of std::basic_istream<CharT,Traits>) |