std::getline - cppreference.com
De cppreference.com
| Definido en el archivo de encabezado |
||
|
|
(1) | |
|
|
(1) | (desde C++11) |
|
|
(2) | |
|
|
(2) | (desde C++11) |
getline lee los caracteres de una secuencia de entrada y los coloca en una cadena:
1) Se comporta como una función de entrada sin formato, UnformattedInputFunction, excepto que input.gcount() no se ve afectada. Después de construir y comprobar 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 situaciones (comprobadas en el orden indicado):
b) el siguiente carácter de entrada disponible es 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.
c) se han almacenado str.max_size() caracteres, en cuyo caso getline establece
y retorna.
3) Si no se extrajeron caracteres por alguna razon (ni siquiera el delimitador descartado), getline establece
y retorna.
2) Lo mismo que getline(input, str, input.widen('\n')), es decir, el delimitador por defecto es el carácter fin de línea.
Parámetros
| input | - | El flujo del cual obtener los datos. |
| str | - | La cadena en la cual poner los datos. |
| delim | - | El carácter delimitador. |
Valor de retorno
input
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');
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 usuario std::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ínea std::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
Véase también
| Extrae caracteres hasta que se encuentra el carácter dado. (función miembro pública de std::basic_istream) [editar]
|