Читайте также:
|
|
У С++ інформацію можна виводити в широкому діапазоні форм. При цьому за допомогою системи введення/виводу C++ можна форматувати дані так само, як це робила в С функція printf(). Крім того, можна змінювати певні параметри введення інформації. Кожен потік введення/виводу пов'язаний з набором прапорів формату (format flags), які управляють способом форматування інформації і є бітовими масками (bitmasks). Ці маски оголошені в класі ios як дані типа fintflags, типу що перераховує, в якому у якому визначені наступні значення:
adjustfield
basefield
boolalpha
dec
fixed
floatfield
hex
internal
left
oct
right
scientific
showbase
showpoint
showpos
skipws
unitbuf
uppercase
Ці значення визначені в класі ios і необхідні для установки або скидання прапорів формату. У таких компіляторах для зберігання прапорів формату відводиться довге ціле. Коли при введенні інформації в потік встановлений прапор skipws, початкові невидимі символи (пропуски, табуляції і символи нового рядка) отбра- сиваются. Коли прапор skipws скинутий, невидимі символи не відкидаються. Коли встановлений прапор left, відбувається вирівнювання виводу по лівому краю. Коли встановлений прапор right, відбувається вирівнювання виводу по правому краю. Коли встановлений прапор internal, для заповнення поля виводу відбувається вставка пропусків між всіма цифрами і знаками числа. Якщо всі ці прапори не встановлені, то за умовчанням використовується вирівнювання по правому краю
За умовчанням числові значення виводяться в десятковій системі числення. Проте підставу системи числення можна поміняти. Установка прапора oct веде до того, що вивід здійснюватиметься у вісімковій системі числення, а установка прапора hex — в шестнадцятерічной. Щоб повернутися до десяткової системи числення, встановите прапор dec. Установка прапора showbase веде до виведення підстави системи числення. Наприклад, шістнадцятиричне значення IF з цим прапором виводитиметься як Oxl F.
За умовчанням при виведенні значень в науковій нотації символ "е" виводіться в нижньому регістрі. Окрім цього, при виведенні шістнадцятиричного значення символ "х" теж виводиться в нижньому регістрі. При установці прапора uppercase, ці символи виводяться у верхньому регістрі. Установка прапора showpos приводить до виведення знаку + перед позитивними значеннями.
Установка прапора showpoint веде до появи десяткової крапки і послідуючих нулів при виведенні будь-яких значень з плаваючою крапкою. При установці прапора scientific числа з плаваючою крапкою виводяться в наукової нотації. При установці прапора fixed числа з плаваючою точкою виводяться в звичайній нотації. Якщо жоден з цих прапорів не встановлений, компілятор сам вибирає відповідний спосіб виводу. Якщо встановлений прапор unitbuf, то буфер очищається (flush) після кожної операції вставки (insertion
При встановленому прапорі boolalpha значення булева типа виводяться у вигляді ключових слів true і false. Одночасно на всі поля, визначені з прапорами oct, dec і hex, можна послатися за допомогою прапора basefield. Аналогічно на поля, визначені з прапорами left, right і internal, можна послатися за допомогою прапора adjustfield. І нарешті, на поля з прапорами scientific і fixed можна послатися за допомогою прапора floatfield. Для установки прапора формату користуйтеся функцією setf(). Ця функція є членом класу ios. Тут показана її основна форма: fmtflags setf(fmtflags прапори);
Ця функція повертає попередні установки прапорів формату і устанав- ліваєт нові, задані значенням прапори. (Значення всіх останніх прапорів не змінюються.) Наприклад, для установки прапора showpos можна користуватися наступною інструкцією: потік_ввода/вивода.setf(ios::showpos); Тут потік введення/виводу — це той потік, на який треба вплинути. Прапор showpos — це константа, що перераховує, усередині класу ios. Функція setf() є членом класу ios і впливає на створених цим класом потоки введення/виводу. Тому будь-який виклик функції setfq робиться відносно конкретного потоку.
Дата добавления: 2015-01-05; просмотров: 80 | Поможем написать вашу работу | Нарушение авторских прав |