std::getline
Definido en el archivo de encabezado <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) | (desde 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) | (desde C++11) |
getline
lee los caracteres de una secuencia de entrada y los coloca en una cadena:
input.gcount()
no se ve afectada. Después de construir y comprobar el objeto centinela, realiza lo siguiente:input
y los añade a str
hasta que ocurre una de las siguientes situaciones (comprobadas en el orden indicado):delim
, como si se hubiera probado mediante Traits::eq(c, delim), en cuyo caso el carácter delimitador se extrae de input
, pero no se añade a str
.getline
establece failbit y retorna.Contenido |
[editar]Parámetros
input | - | El flujo del cual obtener los datos. |
str | - | La cadena en la cual poner los datos. |
delim | - | El carácter delimitador. |
[editar]Valor de retorno
input
[editar]Notas
Al consumir una entrada delimitada por espacios en blanco (p. ej., int n;std::cin>> n;) cualquier espacio en blanco que siga, incluyendo el carácter de nueva línea, se dejará en el flujo de entrada. Entonces, al cambiar a entrada orientada a líneas, la primer línea que se recupere con getline
será solamente ese espacio en blanco. En el dado caso que esto sea comportamiento no deseado, las posibles soluciones incluyen:
- hacer una llamada inicial explícita superflua a
getline
; - eliminar espacios en blanco consecutivos con std::cin>>std::ws;
- ignorar todos los caracteres restantes en la línea de entrada con cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
[editar]Ejemplo
El siguiente ejemplo demuestra cómo usar la función getline
para leer la entrada del usuario y cómo procesar un archivo/fichero línea por línea.
#include <string>#include <iostream>#include <sstream> int main(){// saludar al usuariostd::string nombre;std::cout<<"Cual es tu nombre? "; std::getline(std::cin, nombre);std::cout<<"Hola "<< nombre <<", encantado(a) de conocerte.\n"; // leer un archivo/fichero línea por líneastd::istringstream input; input.str("1\n2\n3\n4\n5\n6\n7\n");int suma =0;for(std::string line; std::getline(input, line);){ suma +=std::stoi(line);}std::cout<<"\La suma es: "<< suma <<"\n";}
Posible salida:
Cual es tu nombre? Aquiles Pinto Flores Hola Aquiles Pinto Flores, encantado(a) de conocerte. La suma es 28
[editar]Véase también
Extrae caracteres hasta que se encuentra el carácter dado. (función miembro pública de std::basic_istream ) |