2.16 Потоковые функции языка C++
Потоковые функции языка C++ представляют собой подборку классов предоставляющих функции для работы с основными потоковыми устройствами системы. Для подключения потоковых функций (классов) необходимо включать следующие заголовочные файлы:
<iostream> -- Включает описание классов: cin, cout, cerr, clog.
<iomanip> -- Включает информацию для обработки форматированного ввода-вывода;
<fstream> -- Включает информацию для выполнения операций с файлами;
<strstream> -- Включает информацию для выполнения операций со строкой.
Потоковые классы имеют следующую иерархию:
- istream ==> ios;
- ostream ==> ios;
- iostream ==> istream, ostream;
- ifstream ==> istream;
- ofstream ==> ostream;
- fstream ==> iostream;
- strstream ==> iostream;
Примеры использования:
cout << "Сообщение" << endl; \\печать строки
cout << "Address" << (void *)ptr; \\указатель
cin.tie(&cout); \\связывание, для печати
\\приглашения ранее запроса
cin.tie(NULL); \\развязывание потока
ofstream outClnt("client.dat",ios::out); \\открыть
\\файл для записи
ifstream inClnt("client.dat",ios::in); \\открыть
\\файл для чтения
strstream ss
ss << "TEXT" << 23 << ends;
String msg( ss.str() );
Операции взятия из потока возвращают "false" при вводе признака конца файла. Для расширенной манипуляций с потоками допускается определение манипуляторов пользователя в виде
ostream &tab(ostream &output) { return output << \t; }
2.16.1 Манипуляторы потока
endl <iostream>
ostream& endl(ostream& outs);
Перевод курсора на следующую строку;
ends <iostream>
ostream& ends(ostream& outs);
Вывести нулевой байт (символ конца строки);
2.16.2 Компонентные функции класса ios <iostream>
bad
int bad();
При ошибке возвращает ненулевое значение.
bitalloc
static long bitalloc();
Возвращает установки флагов. Полученное значение может быть использовано для очистки, установки или проверки флагов.
clear
void clear(int = 0);
Устанавливает состояние потока (обнулить или установить указанные биты).
eofbit - признак конца файла;
failbit - ошибка форматирования, но символы не утеряны;
badbit - потеря данных;
goodbit - ошибок нет.
eof
int eof();
Возвращает ненулевое значение, если имеет место условие конца файла (EOF).
fail
int fail();
Возвращает ненулевое значение, если операция обмена с потоком терпит неудачу.
fill
char fill();
char fill(char);
Устанавливает символ заполнения потока. Возвращает старое значение символа заполнения.
flags
long flags();
long flags(long);
Устанавливает флаги форматирования. Возвращает ранее установленное значение флагов.
good
int good();
Возвращает ненулевое значение если не установлен ни один флаг состояния (ошибок нет).
init
void init(streambuf *);
Связывает ios с указанным <streambuf>.
precision
int precision();
int precision(int);
Устанавливает точность вещественных чисел. Возвращает предыдущее значение точности.
rdbuf
streambuf* rdbuf();
Возвращает указатель на буфер (объект класса <bufstream>), связанный с потоком.
rdstate
int rdstate();
Возвращает текущее состояние потока.
setf
long setf(long);
long setf(long setbits, long field);
Устанавливает флаги по значению параметра или сбрасывает те биты состояния, которые отмечены в <field>, и устанавливает указанные в <setbits>. Возвращает предыдущие значения флагов.
setstate
void setstate(int);
Устанавливает указанные биты состояния.
tie
ostream* tie();
ostream* tie(ostream *);
Организует поток, взаимосвязанный с потоком, на который указывает <ostream*>. Возвращает указатель на взаимосвязанный предыдущий поток, если такой есть.
unself
long unself(long);
Очищает указанные биты состояния потока. Возвращает предыдущее значение.
width
int width();
int width(int);
Устанавливает ширину. Возвращает предыдущее значение.
xalloc
static int xalloc();
????
2.16.3 Компонентные функции класса ostream <iostream>
flush
ostream& flush(ostream& outs);
Сброс строки из буферов в поток;
put
cout.put(char c);
ostream& put(char c);
Вставить в поток символ <c>
seekp
ostream& seekp(long beg);
ostream& seekp(long beg, seek_dir);
Перемещает указатель текущей позиции выходного потока.
tellp
long tellp();
Возвращает текущую позицию указателя записи для выходного потока.
write
oatream& write(const signed char *string, int n);
ostream& write(const unsigned char *string, int n);
Помещает в выходной поток <n> символов из массива, на который указывает <string>. Нуль-символы включаются в число переносимых символов.
2.16.4 Компонентные функции класса istream <iostream>
gcount
int gcount;
Возвращает число символов, извлеченных из потока последним обращением.
get
istream& get(char& c);
istream& get(char* ptr, int len, char delim = '$\backslash $n');
istream& get(streambuf& sb, char delim = '$\backslash $n');
Извлекает из входного потока символы.
getline
istream& getline(signed char ,int sizeof(char), '$\backslash $n');
Тоже что и get, но символ-разделителя, также, помещается в принятую строку символов.
ignore
istream& ignore(int n = 1,int delim = EOF);
Пропускает до n символов входного потока. Останавливается, если встретился разделитель (второй параметр), по умолчанию равный EOF.
peek
int peek();
Извлекает следующий символ из входного потока не удаляя его в потоке.
putback
istream& putback(char);
Помещает символ назад во входной поток.
read
istream& read(signed char *string, int n);
istream& read(unsigned char *string, int n);
Извлекает из входного потока группу символов <n> и помещает их в массив <string>.
seekg
istream& seekg(long beg);
istream& seekg(long beg, seek_dir);
Перемещает указатель чтения входного потока.
tellg
long tellg();
Возвращает текущую позицию указателя чтения входного потока.
Таблица 14.
Флаги класса ios, управляющие форматированием ввода/вывода (манипуляторы потока)
Имя | Назначение |
app | Записать все данные в конец файла. |
ate | Переместиться в конец исходного открытого файла. Данные могут быть записаны в любое место файла. |
binary | Открыть файл для двоичного ввода или вывода. |
dec | Десятичная система счисления (ОСС=10). |
fixed | Использовать формат 123.45 для вывода вещественных чисел (с фиксированной точкой). |
hex | Шестнадцатеричная система счисления (ОСС = 16). |
in | Открыть файл для ввода. |
internal | Поместить разделительные символы после знака или основания системы счисления (ОСС). |
left | Выравнивать по левой стороне поля. |
oct | Восьмеричная система счисления (ОСС= 8). |
out | Открыть файл для вывода. |
right | Выравнивать по правой стороне поля. |
setfill(n) | Установка заполняющего символа <n>. |
scientific | Использовать формат 1.2345Е2 для вывода вещественных чисел (экспоненциальная или научная нотация). |
setbase(n) | Установка значения основания <n>. |
setprecision(n) | Установка точности <n>. |
setw(n) | Установка ширины поля <n>. |
showbase | Указывать ОСС при выводе. |
showpoint | Печатать десятичную точку и следующие за ней нули при выводе вещественных чисел. |
showpos | Добавлять '+' при выводе положительных чисел. |
skipws | Игнорировать символы разделители при вводе. |
stdio | Флэшировать stdout, sfcderr после операции. |
trunc | Отбрасывать содержимое файла, если он существует. |
uppercase | Шестнадцатеричные цифры печатать в верхнем регистре. |
unitbuf | Флэшировать потоки после операции. |