- •Часть 4. Стандартная библиотека
- •Екатеринбург
- •Введение
- •Потоковые классы
- •Стандартные потоки
- •Форматирование данных
- •Флаги и форматирующие методы
- •Манипуляторы
- •Методы обмена с потоком
- •Ошибки потоков
- •Файловые потоки
- •Строковые потоки
- •Конструкторы и присваивание строк
- •Операции
- •Функции Присваивание и добавление частей строк
- •Преобразование строк
- •Поиск подстрок
- •Сравнение частей строк
- •Получение характеристик строк
- •Оглавление
- •Часть 4. Стандартная библиотека
- •620002, Екатеринбург, ул.Мира, 19
- •620002, Екатеринбург, ул.Мира, 19
Стандартные потоки
Заголовочный файл <iostream> помимо описания классов для ввода/вывода содержит четыре предопределенных объекта (табл.1).
Таблица 1
Предопределенные объекты
Объект |
Класс |
Описание |
1 |
2 |
3 |
cin |
istream |
Связывается с клавиатурой (стандартным буферизованным вводом) |
cout |
ostream |
Связывается с экраном (стандартным буферизованным выводом) |
Окончание табл.1
1 |
2 |
3 |
cerr |
ostream |
Связывается с экраном (стандартным небуферизованным выводом), куда направляются сообщения об ошибках |
clog |
ostream |
Связывается с экраном (стандартным буферизованным выводом), куда направляются сообщения об ошибках |
В классах istream и ostream операции извлечения из потока >> и помещения в поток << определены путем перегрузки операций сдвига.
Числовые значения можно вводить в десятичной или шестнадцатеричной системе счисления (с префиксом 0x) со знаком или без знака. Вещественные числа представляются в форме с фиксированной точкой или плавающей точкой (с порядком).
При вводе строки извлечение происходит до ближайшего пробела (вместо него в строку записывается 0-символ).
Значения указателей вводятся в шестнадцатеричной системе счисления.
Форматирование данных
Форматирование в потоковых классах выполняется тремя способами: с помощью флагов, манипуляторов и форматирующих методов.
Флаги и форматирующие методы
Флаги – это отдельные биты, объединенные в поле x_flags типа long класса ios.
Таблица 2
Некоторые флаги форматирования
Флаг |
Умолчание |
Описание |
1 |
2 |
3 |
skipws |
+ |
При извлечении пробельные символы игнорируются |
left |
- |
Выравнивание по левому краю поля |
right |
+ |
Выравнивание по правому краю поля |
internal |
- |
Знак числа выводится по левому краю, число – по правому |
dec |
+ |
Десятичная система счисления |
oct |
- |
Восьмеричная система счисления |
hex |
- |
Шестнадцатеричная система счисления |
showbase |
- |
Выводится основание системы счисления (0x – шестнадцатеричная, 0 – восьмеричная) |
showpoint |
- |
При выводе числа печатается точка и дробная часть числа |
uppercase |
- |
Использование при выводе верхнего регистра |
scientific |
- |
Печать вещественных чисел в экспоненциальной форме |
fixed |
- |
Печать вещественных чисел в форме с фиксированной точкой |
Для управления флагами в классе ios есть методы flags, setf и unsetf.
long ios : : flags (long); – возвращает текущие флаги потока;
long ios : : flags (long); – присваивает флагам значение параметра;
long ios : : setf (long, long); – присваивает флагам, биты которых установлены в первом параметре, значение соответствующих битов второго параметра;
long ios : : setf (long, long); – устанавливает флаги, биты которых установлены в параметре;
long ios : : unsetf (long, long); – сбрасывает флаги, биты которых установлены в параметре;
Все функции возвращают прежние флаги потока.
Кроме флагов для форматирования используются поля класса ios:
int x_width – минимальная ширина поля;
int x_precision – количество цифр в дробной части числа;
int x_fill – символ заполнения поля вывода.
Для управления этими полями используются методы width, precision и fill:
int ios :: width ( ) – возвращает значение ширины поля вывода;
int ios :: width ( ) – устанавливает значение ширины поля вывода;
int ios :: precision ( ) – возвращает значение точности представления дробной части;
int ios :: precision (int ) – устанавливает значение точности представления дробной части;
char fill ( ) – возвращает текущий символ заполнения;
char fill (char) – устанавливает значение текущего символа заполнения (по умолчанию – пробел).
Перед установкой некоторых флагов требуется сбросить флаги, которые не могут быть установлены одновременно с ними. Для этого удобно использовать вторым параметром метода setf статические константы класса ios:
adjustfield (left | right | internal)
basefield ( dec | oct | hex)
floatfield (scientific | fixed)
Пример
# include <iostream.h>
int main ( ) {
long a = 100, b = 077;
cout.width (7); cout.unsetf (ios :: dec);
cout.setf (ios :: hex | ios :: showbase | ios::uppercase);
cout << a;
cout.width (7);
cout << b << endl;
double d = 0.12, c = 1.3e-4;
cout.setf(ios :: left);
cout << d << endl;
cout << c;
return 0;
}
Результат работы программы:
0X3T8 0X3F
0.12
0.00013