
- •618 Глава 10
- •620 Глава 10
- •Глава 10
- •624 Глава 10
- •626 Глава 10
- •630 Глава 11 План
- •11.3. Вывод потоков
- •11.4. Ввод потоков
- •11.7. Состояния формата потоков
- •11.10. Связывание выходного потока с входным
- •11.1. Введение
- •632 Глава 11
- •11.2. Потоки
- •11.2.1. Заголовочные файлы библиотеки iostream
- •11.2.2. Классы и объекты потоков ввода-вывода
- •634 Глава 11
- •11.3. Вывод потоков
- •11.3.1. Операция поместить в поток
- •636 _ Глава 11
- •47 Плюс 53 равняется 100
- •11.3.2. Сцепление операций поместить в поток и взять из потока
- •47 Плюс 53 равняется 100
- •638 _ Глава 11
- •11.3.3. Вывод переменных типа char *
- •11.3.4. Вывод символов с помощью функции-элемента put; сцепленные выводы
- •11.4. Ввод потоков
- •11.4.1. Операция взять из потока
- •640 _ Глава 11
- •7 Не равно 5
- •8 Равно 8
- •11.4.2. Функции-элементы get и getline
- •642 Глава 11
- •644 Глава 11
- •11.4.3. Другие функции-элементы класса istream (peek, putback, ignore)
- •11.4.4. Сохранение типов данных при вводе-выводе
- •11.5. Неформатированный ввод-вывод с использованием read, gcount и write
- •11.6. Манипуляторы потоков
- •646 _ Глава 11
- •11.6.1. Манипуляторы потоков dec, oct, hex и setbase, задающие основание чисел
- •11.6.2. Точность чисел с плавающей запятой (precision,
- •11.6.3. Ширина поля (setw, width)
- •648 Глава 11
- •650 Глава 11
- •11.6.4. Манипуляторы, определяемые пользователем
- •11.7. Состояния формата потоков
- •11.7.1. Флаги состояний формата
- •Глава 11
- •11.7.2. Нулевые младшие разряды и десятичные точки
- •11.7.3. Выравнивание (ios::left, ios::right, ios::internal)
- •654 Глава 11
- •11.7.4. Заполнение (fill, setfill)
- •10000 Напечатанное как целое с выравниванием right и left и как шестнадцатеричное с выравниванием internal Использование заполняющего символа по умолчанию (пробела)
- •656 Глава 11
- •11.7.5. Основание системы счисления (ios::dec, ios::oct, ios::hex,
- •11.7.6. Числа с плавающей запятой; экспоненциальный формат (ios::scientific, ios::fixed)
- •658 Глава 11
- •11.7.7. Управление выводом в нижнем и верхнем регистрах
- •11.7.8. Установка и сброс флагов формата (flags, setiosflags
- •11.8. Состояния ошибок потока
- •11.9. Ввод-вывод определенных пользователем типов данных
- •Глава 11
- •После cin.Clear():
- •664 Глава 11
- •11.10. Связывание выходного потока с входным
- •Глава 11
- •Глава 11
- •670 Глава 11
- •672 Глава 11
- •674 Глава 11
- •676 Глава 11
- •1) Неверно. Поток cin связан со стандартным устройством ввода компьютера, обычно с клавиатурой.
- •0) Верно.
- •678 Глава 11
- •680 Глава 11
- •684 Глава 12
- •12.2. Шаблоны функций
- •686 Глава 12
- •Глава 12
- •12.3. Перегрузка шаблонных функций
- •12.4. Шаблоны классов
- •Глава 12
- •692 Глава 12
- •694 Глава 12
- •12.5. Шаблоны классов и нетиповые параметры
- •12.6. Шаблоны и наследование
- •12.7. Шаблоны и друзья
- •696 Глава 12
- •12.8. Шаблоны и статические элементы
- •Глава 12
- •700 Глава 12
- •702 Глава 12
- •704 Глава 13 План
- •13.1. Введение
- •706 Глава 13
- •708 Глава 13
- •13.2. Когда должна использоваться обработка исключений
- •13.3. Другие методы обработки ошибок
- •710 Глава 13
- •13.5. Простой пример обработки исключений: деление на нуль
- •712 Глава 13
- •13.6. Блоки try
- •13.7. Генерация исключений
- •714 Глава 13
- •13.8. Перехват исключений
- •716 Глава 13
- •718 Глава 13
- •13.9. Повторная генерация исключений
650 Глава 11
11.6.4. Манипуляторы, определяемые пользователем
Пользователи могут создавать собственные манипуляторы потоков. Рис. 11.19 показывает создание и использование новых манипуляторов потоков bell, ret (возврат каретки), tab и endLine. Пользователи могут также создавать собственные параметризованные манипуляторы потоков; обратитесь за справкой, как это сделать, к вашему руководству по системе.
11.7. Состояния формата потоков
Различные флаги формата задают виды форматирования, которые выполняются во время операций ввода-вывода. Управляют установками флагов функции-элементы setf, unsetf и fIags.
11.7.1. Флаги состояний формата
Каждый из флагов состояний формата, показанных на рис. 11.20, (а также тех флагов, которые не показаны) определяется как перечислимый тип в классе ios и разъясняется в нескольких следующих разделах.
Эти флаги могут управляться функциями-элементами flags, setf и unsetf, но многие программисты предпочитают использовать манипуляторы потоков (см. раздел 11.7.8). Программист может использовать операцию побитовое ИЛИ | для объединения разных опций в одно значение типа long (см. рис. 11.23). Вызов функции-элемента flags для потока с заданием этих соединенных операцией | опций устанавливает опции этого потока и возвращает значение типа long, содержащее предыдущие значения опций. Это значение часто сохраняется с тем, чтобы можно было впоследствии вызвать функцию flags с этим сохраненным значением и восстановить предыдущие значения опций.
Функция flags должна задавать значение, выполняющее установку всех флагов. С другой стороны, единственный аргумент функции setf задает один или более флагов, соединенных операцией |, и может использовать текущие установки флагов для создания нового состояния формата.
Параметризованный манипулятор потока setiosflags выполняет те же функции, что и функция-элемент setf. Манипулятор потока resetiosflags выполняет те же функции, что и функция-элемент unsetf. Чтобы использовать любой из этих манипуляторов потока, убедитесь, что включена директива #include <iomanip.h>.
Флаг skipws показывает, что операция взять из потока » должна пропускать символы разделители во входном потоке. По умолчанию операция » пропускается символы разделители. Чтобы изменить это, т.е. сбросить флаг skipws, используйте вызов функции unsetf (ios::skipws). Манипулятор потока ws также может быть использован для указания, надо ли пропускать символы разделители.
Потоки ввода-вывода в С++ _ 651
// figll_19.cpp
// Создание и проверка непараметризованных манипуляторов
// потока, определенных пользователем.
#include <iostream.h>
//Манипулятор bell (использующий управляющую // последовательность \a) ostream& bell (ostream& output)
{
return output « ' \a' ;
}
//Манипулятор ret (использующий управляющую последовательность \r)
ostream& ret(ostream& output)
{
return output « ' \r' ; }
//Манипулятор tab (использующий управляющую последовательность \t)
ostream& tab(ostream& output) {
return output « '\t'; }
//Манипулятор endLine (использующий управляющую
// последовательность \n)
//и функция-элемент flush
ostream& endLine(ostream& output)
{
return output « '\n' « flush;
main (
cout « "Проверка манипулятора tab:" « endLine
« 'a' « tab « 'b' « tab « 'c' « endLine « "Проверка манипуляторов ret и bell:" « endLine « " .......... " ;
for (int i = 1; i <= 100; i++) cout « bell;
cout « ret « " ----- " « endLine; return 0;
Проверка манипулятора tab:
а Ь с
Проверка манипуляторов ret и bell :
Рис. 11.19. Создание и проверка непараметризованных манипуляторов потока, определенных
пользователем
652