Программирование >>  Операторы преобразования типа 

1 ... 186 187 188 [ 189 ] 190 191 192 ... 239


streamsize 7stream;:gcount () const

О Возвращает количество символов, прочитанных последней операцией неформатированного ввода.

istream /stream;:Ignore С)

istreame istream:-.ignore (streamsize count)

istream istream:[ignore (streamsize count, int delim)

О Все формы извлекают символы из потока данных и игнорируют их.

О Первая форма игнорирует один символ.

О Вторая форма игнорирует до count символов.

О Третья форма игнорирует до count символов и прекращает работу тогда, когда будет извлечен и проигнорирован символ delim.

О Если значение count равно std::numeric limits<std::streamsize>::max(), то есть максимальному значению типа std::streamsize (см. с. 72), функция игнорирует все символы до тех пор, пока не будет обнаружен ограничитель delim или конец файла.

О Все формы возвращают объект потока данных. О Примеры:

□ игнорирование остатка строки:

c1n.1gnore(numeric l1m1ts<std; :streams1ze>: :max(), Лп):

□ игнорирование всех оставшихся символов cin:

с1 п. 1 gnore(numeriс 11 mits<std;: streamsize>::max()):

int istream: :peek ()

О Возвращает следующий считываемый из потока данных символ без его извлечения. Символ считывается следующей операцией чтения (если не изменится позиция ввода).

О Если дальнейшее чтение невозможно, возвращает EOF.

О EOF - значение, возвращаемое traits::eofO. Для класса istream это константа EOF.

istream 7stream::unget О istreame istream;:putback {char c)

О Обе функции возвращают в поток данных последний считанный символ, чтобы он был считан следующей операцией чтения (если не изменится позиция ввода).

О Различия мелсду функциями unget и pushback() заключаются в том, что putback() проверяет, был ли передаваемый символ с последним считанным символом.

О Если символ не удается вернуть или функция putbackO пытается вернуть другой символ, устанавливается флаг badbit, что может привести к выдаче соответствующего исключения (см. с. 576).

О Максимальное количество символов, которые могут быть возвращены в поток данных этими функциями, зависит от реализации. По стандарту гаранти-



рованно работает только один вызов этих функций между двумя операциями чтения. Следовательно, только этот вариант может считаться переносимым.

При чтении С-строк описанные здесь функции безопаснее оператора >>, поскольку они требуют явной передачи максимального размера читаемой строки. Хотя количество читаемых символов можно ограничить и при использовании оператора >> (см. с. 593), об этом часто забывают.

Вместо использования потоковых функций ввода часто удобнее работать с потоковым буфером напрямую. Функции потоковых буферов позволяют эффективно читать отдельные символы или последовательности символов без затрат на конструирование объектов sentry (см. с. 631). Интерфейс потоковых буферов более подробно рассматривается на с. 636. Также можно воспользоваться шаблонным классом istreambuf iterator, предоставляющим итераторный интерфейс к потоковому буферу (см. с. 638).

Функции tellgO и seekg() предназначены для изменения текущей позиции чтения, в основном они используются при работе с файлами, поэтому их описание откладывается до с. 609.

Функции вывода

в следующих определениях ostream обозначает потоковый класс, используемый для записи. Это может быть класс ostream, wostream или любая другая специализация класса шаблона basic ostream. Параметр char обозначает соответствующий тип символов (char для ostream, wchar t для wostream). Другие типы и значения, выводимые курсивом. Зависят от определения типа символов или класса трактовок, связанного с потоком данных.

ostream ostream:-.put {char с)

О Записывает аргумент с в поток данных.

О Возвращает объект потока данных, по состоянию которого можно проверить, успешно ли выполнена запись.

ostream ostream::write (const char* str. streamslze count)

О Записывает count символов строки str в поток данных.

О Возвращает объект потока данных, по состоянию которого можно проверить, успешно ли выполнена запись.

О Символ завершения строки не останавливает запись и выводится вместе с остальными символами.

О Перед вызовом необходимо убедиться в том, что str содержит не менее count символов, иначе вызов приводит к непредсказуемым последствиям.

ostream ostream::f]ush О

Очищает потоковые буферы (принудительная запись всех буферизованйых данных на устройство или в канал ввода-вывода, с которым связан буфер).

Функции tellpO и seekpO предназначены для изменения текущей позиции записи. В основном оии используются при работе с файлами, поэтому их описание откладывается до с. 609.



По аналогии с функциями ввода иногда бывает удобно работать с потоковым буфером напрямую или воспользоваться шаблонным классом ostreambufjterator для неформатированного вывода. Функции неформатированного вывода не дают особых преимуществ, если не считать того, что они могут обеспечивать синхронизацию в многопоточных средах с использованием объектов sentry. За дополнительной информацией обращайтесь к с. 655.

Пример использования

Классический фильтр, который просто выводит в выходной поток данных все прочитанные символы, выглядит на С++ так:

1o/charcatl.cpp #1nclude <iostreani> using narnespace std:

Int mainO {

char c;

Пока удается прочитать символ while (cln.get(c)) {

Вывести прочитанный символ в выходной поток

cout.put(c):

При каждом вызове cin.get(c) следующий символ присваивается переменной с, которая передается по ссылке. Функция get() возвращает объект потока данных; таким образом, условие while остается истинным до тех пор, пока поток данных находится в нормальном состоянии.

Чтобы повысить эффективность программы, можно работать напрямую с потоковыми буферами. На с. 641 приведена версия этого примера, в которой при вводе-выводе используются буферные итераторы, а в версии на с. 656 все входные данные копируются одной командой.

Манипуляторы

Потоковые манипуляторы упоминались на с. 561. Это объекты, которые при применении к ним стандартных операторов ввода-вывода изменяют поток дан-

В данном случае речь идет не об описываемых в этой главе потоках данных (streams), а о потоках выполнения (tlireads). - Примеч. перев.

Такой интерфейс лучше классического интерфейса фильтров в языке С. В С вам пришлось бы использовать функцию getcliar() или getc(), которая возвращает как следующий символ, так и признак конца файла. В этом случае возвращаемое значение пришлось бы обрабатывать как тип iiit, чтобы отличить символ от признака конца файла.



1 ... 186 187 188 [ 189 ] 190 191 192 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика