std::basic_istream<CharT,Traits>:: getline
|
basic_istream
&
getline
(
char_type
*
s,
std::
streamsize
count
)
;
|
(1) | |
|
basic_istream
&
getline
(
char_type
*
s,
std::
streamsize
count, char_type delim
)
;
|
(2) | |
Extrae caracteres del flujo hasta el final de línea o el delimitador especificado delim .
La primera sobrecarga es equivalente a getline ( s, count, widen ( ' \n ' ) ) .
Se comporta como una UnformattedInputFunction . Después de construir y verificar el objeto sentry, extrae caracteres de * this y los almacena en ubicaciones sucesivas del array cuyo primer elemento está apuntado por s , hasta que ocurra cualquiera de las siguientes condiciones (evaluadas en el orden mostrado):
- se produce una condición de fin de archivo en la secuencia de entrada.
-
el siguiente carácter disponible
c
es el delimitador, determinado por
Traits
::
eq
(
c, delim
)
. El delimitador se extrae (a diferencia de
basic_istream::get()) y se cuenta para gcount() , pero no se almacena. - count no es positivo, o count - 1 caracteres han sido extraídos ( setstate ( failbit ) se llama en este caso).
Si la función no extrae ningún carácter,
failbit
se establece en el estado de error local antes de que
setstate()
sea llamado.
En cualquier caso, si count > 0 , entonces almacena un carácter nulo CharT ( ) en la siguiente ubicación sucesiva del array y actualiza gcount() .
Contenidos |
Notas
Debido a que la condición #2 se prueba antes que la condición #3, la línea de entrada que cabe exactamente en el búfer no activa
failbit
.
Debido a que el carácter de terminación se cuenta como un carácter extraído, una línea de entrada vacía no activa
failbit
.
Parámetros
| s | - | puntero a la cadena de caracteres donde almacenar los caracteres |
| count | - | tamaño de la cadena de caracteres apuntada por s |
| delim | - | carácter delimitador para detener la extracción. Se extrae pero no se almacena. |
Valor de retorno
* this
Excepciones
Si una operación interna lanza una excepción, esta es capturada y
badbit
se establece. Si
exceptions()
está configurado para
badbit
, la excepción se relanza.
Ejemplo
#include <array> #include <iostream> #include <sstream> #include <vector> int main() { std::istringstream input("abc|def|gh"); std::vector<std::array<char, 4>> v; // nota: el siguiente bucle termina cuando std::ios_base::operator bool() // en el flujo devuelto por getline() retorna false for (std::array<char, 4> a; input.getline(&a[0], 4, '|');) v.push_back(a); for (auto& a : v) std::cout << &a[0] << '\n'; }
Salida:
abc def gh
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 531 | C++98 |
std::getline
no podía manejar el
caso donde count no es positivo |
no se extrae ningún carácter
en este caso |
Véase también
|
leer datos de un flujo de E/S a una cadena
(plantilla de función) |
|
|
extrae datos formateados
(función miembro pública) |
|
|
extrae caracteres
(función miembro pública) |
|
|
extrae bloques de caracteres
(función miembro pública) |