Каждая неформатированная функция ввода начинает выполнение с создания объекта класса sentry с аргументом по умолчанию noskipws (вторым) аргументом true. Если sentry объект возвращается trueпри преобразовании в значение типа bool, функция пытается получить запрошенный ввод. В противном случае, если конструктор часового выходит, генерируя исключение, или если объект часового возвращаетсяfalse, при преобразовании в значение типа boolфункция возвращается, не пытаясь получить какие-либо входные данные. В любом случае количество извлеченных символов равно 0; неформатированные входные функции, принимающие в качестве аргумента массив символов ненулевого размера, также должны сохранять нулевой символ (использование charT()) в первом месте массива. Если во время ввода возникает исключение, то ios::badbit он включается310 в *thisсостоянии ошибки. (basic_ios<>::clear() Выброшенные исключения не перехватываются и не генерируются повторно.) Если (exceptions()&badbit) != 0 тогда исключение генерируется повторно. Он также считает количество извлеченных символов. Если исключение не было создано, оно заканчивается сохранением счетчика в объекте-члене и возвратом указанного значения. В любом случае sentry объект уничтожается до выхода из неформатированной функции ввода.
streamsize gcount() const;
Effects: Никто. Эта функция-член не ведет себя как неформатированная функция ввода (как описано выше).
Returns: Число символов, извлеченных последней неформатированной входной функцией-членом, вызванной для объекта.
int_type get();
Effects: Ведет себя как неформатированная функция ввода (как описано выше). После создания сторожевого объекта извлекает персонажаc, если он доступен. В противном случае вызовы функции setstate(failbit), которая может throw ios_base::failure ([iostate.flags]),
basic_istream<charT, traits>& get(char_type& c);
Effects: Ведет себя как неформатированная функция ввода (как описано выше). После создания сторожевого объекта извлекает персонажа, если он доступен, и назначает егоc.311 В противном случае вызывается функция setstate(failbit) (которая может throw ios_base::failure ([iostate.flags])).
basic_istream<charT, traits>& get(char_type* s, streamsize n, char_type delim);
Effects: Ведет себя как неформатированная функция ввода (как описано выше). После создания сторожевого объекта извлекает символы и сохраняет их в последовательных местах массива, первый элемент которого обозначен знаком s.312 Символы извлекаются и сохраняются до тех пор, пока не произойдет одно из следующих событий:
n меньше единицы илиn - 1 символы сохраняются;
конец файла происходит во входной последовательности (в этом случае функция вызывает setstate(eofbit));
traits::eq(c, delim) для следующего доступного входного символаc (в этом случаеc не извлекается).
Если функция не хранит символы, она вызывает setstate(failbit) (что может вызвать throw ios_base::failure ([iostate.flags])). В любом случае, еслиn он больше нуля, он сохраняет нулевой символ в следующем последовательном месте массива.
basic_istream<charT, traits>& get(char_type* s, streamsize n);
basic_istream<charT, traits>& get(basic_streambuf<char_type, traits>& sb, char_type delim);
Effects: Ведет себя как неформатированная функция ввода (как описано выше). После создания сторожевого объекта извлекает символы и вставляет их в выходную последовательность, управляемую sb. Символы извлекаются и вставляются до тех пор, пока не произойдет одно из следующих событий:
конец файла встречается во входной последовательности;
вставка в выходную последовательность не выполняется (в этом случае вставляемый символ не извлекается);
traits::eq(c, delim) для следующего доступного входного символаc (в этом случаеc не извлекается);
возникает исключение (в этом случае исключение перехватывается, но не генерируется повторно).
Если функция не вставляет символы, она вызывает setstate(failbit), что может вызвать throw ios_base::failure ([iostate.flags]).
basic_istream<charT, traits>& get(basic_streambuf<char_type, traits>& sb);
basic_istream<charT, traits>& getline(char_type* s, streamsize n, char_type delim);
Effects: Ведет себя как неформатированная функция ввода (как описано выше). После создания сторожевого объекта извлекает символы и сохраняет их в последовательных местах массива, первый элемент которого обозначен знаком s.313 Символы извлекаются и сохраняются до тех пор, пока не произойдет одно из следующих событий:
1.конец файла происходит во входной последовательности (в этом случае функция вызывает setstate(eofbit));
2.traits::eq(c, delim) для следующего доступного входного символаc (в этом случае входной символ извлекается, но не сохраняется);314
3.n меньше единицы илиn - 1 символы сохраняются (в этом случае функция вызывает setstate(failbit)).
Если функция не извлекает символы, она вызывает setstate(failbit) (что может вызвать throw ios_base::failure ([iostate.flags])).316
В любом случае, еслиn он больше нуля, он затем сохраняет нулевой символ (использование charT()) в следующем последовательном месте массива.
[ Example:
#include <iostream> int main() { using namespace std; const int line_buffer_size = 100; char buffer[line_buffer_size]; int line_number = 0; while (cin.getline(buffer, line_buffer_size, '\n') || cin.gcount()) { int count = cin.gcount(); if (cin.eof()) cout << "Partial final line"; // cin.fail() is false else if (cin.fail()) { cout << "Partial long line"; cin.clear(cin.rdstate() & ~ios_base::failbit); } else { count--; // Don't include newline in count cout << "Line " << ++line_number; } cout << " (" << count << " chars): " << buffer << endl; } }
— end example ]
basic_istream<charT, traits>& getline(char_type* s, streamsize n);
basic_istream<charT, traits>& ignore(streamsize n = 1, int_type delim = traits::eof());
Effects: Ведет себя как неформатированная функция ввода (как описано выше). После создания объекта-часового извлекает персонажей и отбрасывает их. Символы извлекаются до тех пор, пока не произойдет одно из следующих событий:
n != numeric_limits<streamsize>::max() и n персонажи были извлечены до сих пор
конец файла происходит во входной последовательности (в этом случае вызывается функция setstate(eofbit), которая может throw ios_base::failure ([iostate.flags]));
traits::eq_int_type(traits::to_int_type(c), delim) для следующего доступного входного символаc (в этом случаеc извлекается).
Remarks: Последнее условие никогда не произойдет, если traits::eq_int_type(delim, traits::eof()).
int_type peek();
Effects: Ведет себя как неформатированная функция ввода (как описано выше). После создания сторожевого объекта считывает, но не извлекает текущий входной символ.
Returns: traits::eof() если good() есть false. В противном случае возвращается rdbuf()->sgetc().
basic_istream<charT, traits>& read(char_type* s, streamsize n);
Effects: Ведет себя как неформатированная функция ввода (как описано выше). После создания сторожевого объекта, если !good() вызовы, setstate(failbit) которые могут вызвать исключение, и возврат. В противном случае извлекает символы и сохраняет их в последовательных местах массива, первый элемент которого обозначен знаком s.317 Символы извлекаются и сохраняются до тех пор, пока не произойдет одно из следующих событий:
n символы сохраняются;
конец файла происходит во входной последовательности (в этом случае вызывается функция setstate(failbit | eofbit), которая может throw ios_base::failure ([iostate.flags])).
streamsize readsome(char_type* s, streamsize n);
Effects: Ведет себя как неформатированная функция ввода (как описано выше). После создания сторожевого объекта, если !good() вызовы, setstate(failbit) которые могут вызвать исключение, и возврат. В противном случае извлекает символы и сохраняет их в последовательных местах массива, первый элемент которого обозначен знаком s. Если rdbuf()->in_avail() == -1, вызывает setstate(eofbit) (который может throw ios_base::failure ([iostate.flags])) и не извлекает символы;
Если rdbuf()->in_avail() == 0, не извлекает символы
Если rdbuf()->in_avail() > 0, извлекает min(rdbuf()->in_avail(), n)).
basic_istream<charT, traits>& putback(char_type c);
Effects: Ведет себя как неформатированная функция ввода (как описано выше), за исключением того, что функция сначала очищаетсяeofbit. После создания сторожевого объекта, если !good() вызовы, setstate(failbit) которые могут вызвать исключение, и возврат. Если rdbuf() не равно нулю, вызывает rdbuf->sputbackc(). Если rdbuf() имеет значение null, или если sputbackc() возвращается traits::eof(), вызывает setstate(badbit) (который может throw ios_base::failure ([iostate.flags])). [ Note: Эта функция не извлекает символы, поэтому при следующем вызове возвращается значение gcount() 0. ] — end note
basic_istream<charT, traits>& unget();
Effects: Ведет себя как неформатированная функция ввода (как описано выше), за исключением того, что функция сначала очищаетсяeofbit. После создания сторожевого объекта, если !good() вызовы, setstate(failbit) которые могут вызвать исключение, и возврат. Если rdbuf() не равно нулю, вызывает rdbuf()->sungetc(). Если rdbuf() имеет значение null, или если sungetc() возвращается traits::eof(), вызывает setstate(badbit) (который может throw ios_base::failure ([iostate.flags])). [ Note: Эта функция не извлекает символы, поэтому при следующем вызове возвращается значение gcount() 0. ] — end note
int sync();
Effects: Ведет себя как неформатированная функция ввода (как описано выше), за исключением того, что она не подсчитывает количество извлеченных символов и не влияет на значение, возвращаемое последующими вызовами gcount(). После создания сторожевого объекта rdbuf() возвращается пустой указатель-1. В противном случае вызывает rdbuf()->pubsync() и, если эта функция возвращает-1 вызовы setstate(badbit) (которые могут вызывать throw ios_base::failure ([iostate.flags]), и возвращает -1. В противном случае возвращает ноль.
pos_type tellg();
Effects: Ведет себя как неформатированная функция ввода (как описано выше), за исключением того, что она не подсчитывает количество извлеченных символов и не влияет на значение, возвращаемое последующими вызовами gcount().
Returns: После создания сторожевого объекта, если fail() != false, возвращается, pos_type(-1) чтобы указать на сбой. В противном случае возвращается rdbuf()->pubseekoff(0, cur, in).
basic_istream<charT, traits>& seekg(pos_type pos);
Effects: Ведет себя как неформатированная функция ввода (как описано выше), за исключением того, что функция сначала очищаетeofbit, она не подсчитывает количество извлеченных символов и не влияет на значение, возвращаемое последующими вызовами gcount(). После создания сторожевого объекта if fail() != trueвыполняется rdbuf()->pubseekpos(pos, ios_base::in). В случае неудачи вызовы функции setstate(failbit) (которые могут выкинуть ios_base::failure).
basic_istream<charT, traits>& seekg(off_type off, ios_base::seekdir dir);
Effects: Ведет себя как неформатированная функция ввода (как описано выше), за исключением того, что функция сначала очищаетeofbit, не подсчитывает количество извлеченных символов и не влияет на значение, возвращаемое последующими вызовамиgcount(). После создания сторожевого объекта if fail() != trueвыполняется rdbuf()->pubseekoff(off, dir, ios_base::in). В случае неудачи вызовы функцииsetstate(failbit) (которые могут выкинуть ios_base::failure).
Это делается без ios::failure броска.
Обратите внимание, что эта функция не перегружена для типов signed char и unsigned char.
Обратите внимание, что эта функция не перегружена для типов signed char и unsigned char.
Обратите внимание, что эта функция не перегружена для типов signed char и unsigned char.
Поскольку последний входной символ «извлекается», он засчитывается в gcount(), даже если он не сохраняется.
Это позволяет вводной строке, которая точно заполняет буфер, без настройки failbit. Это отличается от исторической реализации AT&T.
Это означает, что пустая строка ввода не failbit требует установки.
Обратите внимание, что эта функция не перегружена для типов signed char и unsigned char.