Spec-Zone.ru › C++

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)

Извлекает символы из потока до конца строки или заданного разделителя delim.

Первый вариант эквивалентен getline(s, count, widen('\n')).

Ведёт себя как UnformattedInputFunction. После создания и проверки объекта-стража извлекает символы из *this и сохраняет их в последовательных ячейках массива, на первый элемент которого указывает s, пока не произойдёт одно из следующих событий (проверяемых в указанном порядке):

  1. В последовательности ввода возникает условие конца файла.
  2. Следующий доступный символ c является разделителем, что определяется с помощью Traits::eq(c, delim). Разделитель извлекается (в отличие от basic_istream::get()) и учитывается в gcount(), но не сохраняется.
  3. count неположительно или извлечено count - 1 символов (в этом случае вызывается setstate(failbit)).

Если функция не извлекла ни одного символа, перед вызовом setstate() в локальное состояние ошибки устанавливается failbit.

В любом случае, если count > 0, в следующую ячейку массива записывается нулевой символ CharT(), а значение gcount() обновляется.

Примечания

Поскольку условие № 2 проверяется до условия № 3, строка ввода, которая точно помещается в буфер, не приводит к failbit.

Поскольку завершающий символ учитывается как извлечённый символ, пустая строка ввода не приводит к failbit.

Параметры

s - указатель на символьную строку, в которую сохраняются символы
count - размер символьной строки, на которую указывает s
delim - разделитель, при достижении которого извлечение прекращается. Он извлекается, но не сохраняется.

Возвращаемое значение

*this

Исключения

failure, если произошла ошибка (флаг состояния ошибки не равен goodbit) и для этого состояния задано выбрасывание исключения с помощью exceptions().

Если внутренняя операция выбрасывает исключение, оно перехватывается, а badbit устанавливается. Если для badbit задано exceptions(), исключение выбрасывается повторно.

Пример

#include <array>
#include <iostream>
#include <sstream>
#include <vector>

int main()
{
    std::istringstream input("abc|def|gh");
    std::vector<std::array<char, 4>> v;
    
    // note: the following loop terminates when std::ios_base::operator bool()
    // on the stream returned from getline() returns 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';
}

Вывод:

abc
def
gh

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.

Отчёт об ошибке Применяется к Опубликованное поведение Корректное поведение
LWG 531 C++98 std::getline не обрабатывал случай,
когда count неположительно
в этом случае символы
не извлекаются

См. также

getline
считывает данные из потока ввода-вывода в строку
(шаблон функции)
operator>>
извлекает форматированные данные
(открытая функция-член)
get
извлекает символы
(открытая функция-член)
read
извлекает блоки символов
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_istream/getline

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API