Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція №9 Потоковий ввід-вивід.doc
Скачиваний:
2
Добавлен:
24.11.2019
Размер:
196.61 Кб
Скачать

Void unsetf ( fmtflags mask ) ;

Она сбрасывает флаги, заданные параметром mask. Следующий пример демонстрирует некоторые флаги:

#include <iostream>

Void main ( )

{

double d = 1.321e9 ; int n = 1024 ;

// выводит значения

cout << "d = " << d << "\tn = " << n << ' \n ' ;

// изменяет флаги

cout.setf ( ios :: hex | ios :: uppercase ) ;

cout.setf ( ios :: showpos ) ;

// выводит значения снова

cout << "d = " << d << "\tn = " << n << ' \n ' ;

}

При выполнении программа выводит на экран:

d = 1.321е+09 n = 1024

d = +1.321Е+09 n = +1024

Манипуляторы ввода-вывода

Система ввода-вывода C++ предусматривает еще один способ форматирования потока. Этот способ основан на использовании манипуляторов ввода-вывода. Манипуляторы ввода-вывода представляют собой просто вид функций-членов класса ios, которые, в отличие от обычных функций-членов, могут располагаться внутри инструкций ввода-вывода. В связи с этим ими пользоваться обычно удобнее. Манипуляторы вывода имеют следующее назначение:

endl вставляет символ конца строки и очищает буфер;

ends вставляет символ конца строки;

flush очищает буфер потока;

left устанавливает флаг left;

right устанавливает флаг right;

internal устанавливает флаг internal;

fixed устанавливает флаг fixed;

scientific устанавливает флаг scientific;

showbase устанавливает флаг showbase;

noshowbase сбрасывает флаг showbase;

showpoint устанавливает флаг showpoint;

noshowpoint сбрасывает флаг showpoint;

showpos устанавливает флаг showpos;

noshowpos сбрасывает флаг showpos;

unitbuf устанавливает флаг unitbuf;

nounitbuf сбрасывает флаг unitbuf;

uppercase устанавливает флаг uppercase;

nouppercase сбрасывает флаг uppercase.

Манипуляторы ввода-вывода имеют следующее назначение:

boolalpha устанавливает флаг boolalpha;

noboolalpha сбрасывает флаг boolalpha;

dec устанавливает флаг dec;

hex устанавливает флаг hex;

oct устанавливает флаг oct;

Setbase ( int base ) задает основание системы счисления для целых;

Setfill ( charT c ) устанавливает символ-заполнитель;

Setprecision ( int n ) устанавливает точность чисел с плавающей точкой;

setw ( int n ) устанавливает минимальную ширину поля;

Setiosflags ( ios_base :: fmtflags mask ) Устанавливает ios-флаги, в соответствии с mask;

Resetiosflags ( ios_base :: fmtflags mask ) Сбрасывает ios-флаги, в соответствии с mask.

Манипуляторы ввода имеют следующее назначение:

noskipws сбрасывает флаг skipws;

skipws устанавливает флаг skipws;

ws устанавливает пропуск символов-заполнителей.

За исключением setw ( ), все изменения в потоке, внесенные манипулятором, сохраняются до следующей установки.

При внимательном изучении таблицы можно заметить, что манипуляторы охватывают функциональные возможности, предоставляемые обычными функциями-членами и флагами форматирования. В частности, манипулятор setiosflags ( ) реализует те же функциональные возможности, что и функция-член setf ( ), а манипулятор resetiosflags ( ) – те же, что и функция-член unsetf ( ).

Для доступа к манипуляторам с параметрами необходимо включить в программу стандартный заголовочный файл <iomanip>. При использовании манипулятора без параметров скобки за ним не ставятся, так как на самом деле он представляет собой указатель на функцию-член, который передается перегруженному оператору <<.

Рассмотрим пример, демонстрирующий использование манипуляторов.

#include <iostream.h>

#include <iomanip.h>

#include <math.h>