Программирование на C и C++

Онлайн справочник программиста на C и C++

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

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

Таблица: Манипуляторы ввода/вывода С++
Манипулятор Назначение Ввод/вывод
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 Пропускает начальный символ-разделитель ввод

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

#include <iostream.h>
#include <iomanip.h>
int main()
{
cout << setiosflags(ios::fixed);
cout << setprecision (2) << 1000.243 << endl;
cout << setw (20) << "Hello there.";
return 0;
}

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

1000 .24
                   Hello there.

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

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

#include <iostream.h>
#include <iomanip.h>
main ()
{
cout << setiosflags(ios::showpos);
cout << setiosflags(ios::scientific);
cout << 123 << " " << 123.23;
return 0;
}

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

#include <iostream.h>
int main()
{
char s [80];
cin >> ws >> s;
cout << s;
}