Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции C++.doc
Скачиваний:
7
Добавлен:
01.05.2025
Размер:
1.44 Mб
Скачать

7.4.2 Использование манипуляторов

Система ввода/вывода C++ включает второй способ изменения параметров форматирования по­тока. Для этого используются специальные функции, называемые манипуляторами (manipulators), которые могут включаться в выражения ввода/вывода. Стандартные манипуляторы показаны в таблице 7.1.

Манипулятор

Назначение

Ввод/вывод

dec

Ввод/вывод данных в десятичной форме

ввод и вывод

endl

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

вывод

ends

Вывод нулевого символа

вывод

flush

Сброс в поток содержимого буфера

вывод

hex

Ввод/вывод данных в шестнадцатеричном виде

ввод и вывод

oct

Ввод/вывод данных в восьмеричном виде

ввод и вывод

resetiosflags(long f)

Сбрасывает флаги, указанные в f

ввод и вывод

setbase(int base)

Устанавливает базу счисления равной параметру base

вывод

setfill(int ch)

Устанавливает символ заполнения равным ch

вывод

setiosflags(long f)

Устанавливает флаги, указанные в f

ввод и вывод

setprecision(int p)

Устанавливает число цифр после запятой

вывод

setw(int w)

Устанавливает ширину поля равной w

вывод

ws

Пропускает начальный символ-разделитель

ввод

Таблица 7.1. Манипуляторы ввода/вывода C++

Для использования манипуляторов с параметрами в программу необходимо вклю­чить заголовочный файл iomanip.h.

Манипуляторы могут использоваться в составе выражений ввода/вывода. Ниже представлен пример программы, использующей манипуляторы для изменения формата вывода:

#include <iostream.h>

#include <iomanip.h>

int main()

{

cout << setiosflags(ios::fixed) << setprecision(2) << 1000.243 << endl;

cout << setw(20) << "Hello there.";

return 0;

}

Программа выводит следующие данные:

1000.24

Hello there.

Обратим внимание, как манипуляторы появляются в последовательности операторов ввода/выво­да. Когда манипуляторы не имеют аргументов, как манипулятор endl в этой программе, за ними не следуют скобки. Причина этого в том, что оператору << передается адрес манипулятора.

Следующая программа использует функцию setiosflags() для установки флагов scientific и showpos потока cout:

int main()

{

cout << setiosflags(ios::showpos) << setiosflags(ios::scientific);

cout << 123 << " " << 123.23;

return 0;

}

Следующая программа использует манипулятор ws для пропуска идущих вначале символов-разделителей при вводе строки в переменную s:

int main()

{

char s[80];

cin >> ws >> s;

cout << s;

}

7.5 Создание собственных функций-манипуляторов

Можно создавать свои функции-манипуляторы. Имеются два типа функций-манипуляторов: параметризованные, то есть имеющие аргументы, и непараметризованные — не имеющие аргумен­тов. Имеются некоторые различия между созданием манипуляторов этих двух типов. В следую­щем разделе обсуждается создание манипуляторов каждого типа, начиная с манипуляторов без параметров.