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, пока не произойдёт одно из следующих событий (проверяемых в указанном порядке):
- В последовательности ввода возникает условие конца файла.
- Следующий доступный символ
cявляется разделителем, что определяется с помощьюTraits::eq(c, delim). Разделитель извлекается (в отличие отbasic_istream::get()) и учитывается вgcount(), но не сохраняется. -
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 неположительно | в этом случае символы не извлекаются |
См. также
| считывает данные из потока ввода-вывода в строку (шаблон функции) |
|
| извлекает форматированные данные (открытая функция-член) |
|
| извлекает символы (открытая функция-член) |
|
| извлекает блоки символов (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_istream/getline