Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Способи форматування даних при використанні потоків.






3.Форматування даних.

В потокових класах форматування даних виконується трьома способами:

1) за допомогою прапорців;

2) за допомогою маніпуляторів;

3) за допомогою форматуючих методів.

 

Прапорці і форматуючі методи

Прапорцями є окремі біти, об'єднані в полі x_flags типу long класу ios. Прапорці перераховані в таблиці 1.

 

Таблиця 1. Прапорці форматування класу ios

Прапорець Поло- ження За замовчуванням Опис дії при встановленому прапорцеві
skipws 0x0001 + При вилученні з потоку символи пропусків ігноруються
left 0x0002   Вирівнювання по лівому краю поля
right 0x0004 + Вирівнювання по правому краю поля
internal 0x0008   Знак числа виводиться по лівому краю, число — по правому. Проміжок заповнюється символами x_fill, за замовчуванням пропусками
dec 0x0010 + Десяткова система числення
oct 0x0020   Вісімкова система числення
hex 0x0040   Шістнадцяткова система числення
showbase 0x0080   Виводиться основа системи числення (0х для шістнадцяткових чисел і 0 для вісімкових)
showpoint 0x0100   При виведенні дійсних чисел друкувати десяткову крапку
uppercase 0x0200   При виведенні використовувати символи верхнього регістру
showpos 0x0400   Друкувати знак при виведенні додатніх чисел
scientific 0x0800   Друкувати дійсні числа у формі з плаваючою крапкою
fixed 0x1000   Друкувати дійсні числа у формі з фіксованою крапкою (точність визначається полем х_precision)
unitbuf 0x2000   Вивантажувати буфери всіх потоків після вставки
stdio 0x4000   Вивантажувати буфери потоків stdout і stderr після вставки

Прапорці (left, right та internal), (dec, oct та hex), а також (scientific та fixed) взаємно виключають один одного, тобто в кожен момент може бути встановлений лише один прапорців з кожної групи.

Для управління прапорцями в класі ios є методи flags, setf і unsetf:

long ios:: flags(); — повертає поточні прапорці потоку;

long ios:: flags(long); — присвоює прапорцям значення параметра;

long ios:: setf (long, long); — присвоює прапорцям, біти яких встановлені у першому параметрі, значення відповідних бітів другого параметра;

long ios:: setf (long); — встановлює прапорці, біти яких встановлені у параметрі;

long ios:: unsetf (long); — скидає прапорці, біти яких зазаначені в параметрі.

Всі функції повертають попередні прапорці потоку.

 

Окрім прапорців, для форматування використовуються наступні поля класу ios:

int x_width — мінімальна ширина поля виведення;

int x_precision — точність (кількість цифр в дробовій при виведенні дійсних чисел);

int x_fill — символ заповнення поля виведення.

 

Для управління цими полями використовуються методи width, precision та fill:

int ios:: width() — повертає значення ширини поля;

int ios:: width (int) — встановлює ширину поля відповідно до значення параметра;

int ios:: precision() — повертає значення точності подання при виведенні дійсних чисел;

int ios:: precision(int) — встановлює значення точності подання при виведенні дійсних чисел, повертає старе значення точності;

char fill () — повертає поточний символ заповнення;

char fill (char) — встановлює значення поточного символу заповнення, повертає старе значення символу.

 

Приклад форматування даних за допомогою прапорців і методів.

#include < iostream.h>

int main() {

long a = 1000, b = 077;

cout.width (7);

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; }

В результаті роботи програми в першому рядку будуть ВЕЛИКИМИ буквами виведені змінні а і b в шістнадцятковому поданні, для кожної з них виділяється по 7 позицій (функція width діє тільки на одне значення, що виводиться, тому її виклик потрібно повторити двічі). Значення змінних с і d прив’язані до лівого краю поля:

..ОХ3ЕВ...0X3F

0.12

0.00013


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал