Partilhar via


Função de modelo getline

Extrai cadeias de caracteres do fluxo de entrada linha por linha.

// (1) delimiter as parameter
template<class CharType, class Traits, class Allocator>
basic_istream<CharType, Traits>& getline(
    basic_istream<CharType, Traits>& is,
    basic_string<CharType, Traits, Allocator>& str, CharType delim);

template<class CharType, class Traits, class Allocator>
basic_istream<CharType, Traits>& getline(
    basic_istream<CharType, Traits>&& is,
    basic_string<CharType, Traits, Allocator>& str, const CharType delim);

// (2) default delimiter used
template<class CharType, class Traits, class Allocator>
basic_istream<CharType, Traits>& getline(
    basic_istream<CharType, Traits>& is,
    basic_string<CharType, Traits, Allocator>& str);

template<class Allocator, class Traits, class Allocator>
basic_istream<Allocator, Traits>& getline(
    basic_istream<Allocator, Traits>&& is,
    basic_string<Allocator, Traits, Allocator>& str);

Parâmetros

  • is
    O fluxo de entrada do qual uma cadeia de caracteres será extraída.

  • str
    A cadeia de caracteres na qual são lidos os caracteres do fluxo de entrada.

  • delim
    O delimitador de linha.

Valor de retorno

O fluxo de entrada is.

Comentários

O par de assinaturas de função marcado (1) extrair caracteres de is até delim for encontrado, armazená-los em str.

O par de assinaturas de função marcado (2) usar a nova linha como o delimitador de linha padrão e se comportam como getline(is, str, is.widen('\n')).

A segunda função de cada par é equivalente à primeira para dar suporte a referências de rvalue.

A extração é interrompida quando ocorre uma das seguintes situações:

  • No final do arquivo, caso em que o estado interno do sinalizador de is está definido como ios_base::eofbit.

  • Depois que a função extrai um elemento compara igual a delim, caso em que o elemento não é recolocado nem acrescentado à sequência controlada.

  • Depois que a função extrai elementos str.max_size, caso em que o sinalizador de estado interno de is é definido como ios_base::failbit.

  • Alguns outros erros não listados anteriormente, caso em que o sinalizador de estado interno de is é definido como ios_base::badbit

Para obter informações sobre sinalizadores de estado interno, consulte ios_base::iostate.

Se a função não extrair elementos, o estado interno do sinalizador de is será definido como ios_base::failbit. Em qualquer caso, getline retorna is.

Se uma exceção for gerada, is e str serão deixados em um estado válido.

Exemplo

O código a seguir demonstra getline() em dois modos: primeiro com o delimitador padrão (nova linha) e a segundo com um espaço em branco como delimitador. O caractere de final de arquivo (CTRL-Z no teclado) é usado para controlar a terminação de loops while. Isso define o sinalizador de estado interno de cin para eofbit, que deve ser limpo com basic_ios::clear() antes que o segundo loop while funcione corretamente.

// compile with: /EHsc /W4
#include <string>
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    string str;
    vector<string> v1;
    cout << "Enter a sentence, press ENTER between sentences. (Ctrl-Z to stop): " << endl;
    // Loop until end-of-file (Ctrl-Z) is input, store each sentence in a vector.
    // Default delimiter is the newline character.
    while (getline(cin, str)) {
        v1.push_back(str);
    }

    cout << "The following input was stored with newline delimiter:" << endl;
    for (const auto& p : v1) {
        cout << p << endl;
    }

    cin.clear();

    vector<string> v2;
    // Now try it with a whitespace delimiter
    while (getline(cin, str, ' ')) {
        v2.push_back(str);
    }

    cout << "The following input was stored with whitespace as delimiter:" << endl;
    for (const auto& p : v2) {
        cout << p << endl;
    }
}

Saída

                                    

Requisitos

Cabeçalho: < string >

Namespace: std

Consulte também

Referência

Classe basic_string

<string>