Namespaces
Variants

std::getline

De es.cppreference.net
 
 
 
std::basic_string
 
Definido en el encabezado <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) (desde 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) (desde C++11)

getline Lee caracteres de un flujo de entrada y los coloca en una cadena:

1,2) Se comporta como UnformattedInputFunction, excepto que input.gcount() no se ve afectado. Después de construir y verificar el objeto centinela, realiza lo siguiente:
1) Llama a str.erase().
2) Extrae caracteres de input y los añade a str hasta que ocurre una de las siguientes condiciones (verificadas en el orden listado)
a) condición de fin de archivo en input, en cuyo caso, getline establece eofbit.
b) el siguiente carácter de entrada disponible es delim, según lo probado por Traits::eq(c, delim), en cuyo caso el carácter delimitador se extrae de input, pero no se añade a str.
c) str.max_size() se han almacenado caracteres, en cuyo caso getline establece failbit y retorna.
3) Si no se extrajo ningún carácter por cualquier motivo (ni siquiera el delimitador descartado), getline establece failbit y retorna.
3,4) Igual que getline(input, str, input.widen('\n')), es decir, el delimitador por defecto es el carácter de nueva línea.

Parámetros

input - el flujo del cual obtener los datos
str - la cadena donde colocar los datos
delim - el carácter delimitador

Valor de retorno

input

Notas

Al consumir entrada delimitada por espacios en blanco (por ejemplo, int n ; std:: cin >> n ; ) cualquier espacio en blanco que siga, incluyendo un carácter de nueva línea, permanecerá en el flujo de entrada. Luego, al cambiar a entrada orientada a líneas, la primera línea recuperada con getline será solo ese espacio en blanco. En el caso probable de que este comportamiento no sea deseado, las posibles soluciones incluyen:

Ejemplo

El siguiente ejemplo demuestra cómo utilizar la función getline para leer la entrada del usuario, y procesar un flujo línea por línea, o por partes de una línea usando el parámetro delim .

#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';
}

Salida posible:

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

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 91 C++98 getline no se comportaba como una función de entrada sin formato se comporta como una función de entrada sin formato

Véase también

extrae caracteres hasta encontrar el carácter especificado
(función miembro pública de std::basic_istream<CharT,Traits> )