Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекцій.doc
Скачиваний:
15
Добавлен:
03.11.2018
Размер:
1.12 Mб
Скачать

12.5.4 Прапорці форматування

В потоках C++ допускається використовувати прапорцi формату. Вони задають, яким чином форматується ввiд/вивiд. Прапорцi являються бiтовими полями, що зберiгаються в змiннiй типу long.

Прапорцi формату ios:

ios::skipws якщо встановлений, то при вводi iгноруються пропуски. Встановлений по замовчанню;

ios::left вирiвнювання даних по лiвiй границi поля, по замовчіванню не встановлений;

ios::right вирiвнювання даних по правiй границi поля, встановлений по замовчуванню;

ios::internal з лiвого краю поля виводиться знак чмсла; число вирiвнюється по правому краю, промiжки заповнюються символами fill;

ios::dec якщо встановлений,то числа виводяться з основою 10;

ios::oct якщо встановлений,то числа виводяться з основою 8;

ios::hex якщо встановлений,то числа виводяться з основою 16;

ios::showbase якщо встановлений,то добавляється iндикатор з основою("0x"для 16-ткових i "0" для вiсiмкових);

ios::uppercase якщо встановлений,то букви вiд A до F в 16-кових числах виводяться в верхньому регiстрi.Експонента Е в науковiй нотацiї чисел також виводиться в верхньому регiстрi;

ios::showpoint якщо встановлений, при виводi чисел типу float,double i long double показується десяткова крапка;

ios::showpos якщо встановлений, то виводиться знак + для додатнього числа;

ios::scientific дiйснi числа вводяться в науковiй нотацi·:1.2 e 2;

ios::fixed числа вводяться у формi з фiксованою крапкою:1.567;

ios::unitbuf буфер потоку звiльняється пiсля кожної операцiї помiщення;

ios::stdio якщо встановлений, потоки stdout i strerr звiльняються пiсля кожної операцiї помiщення.

Прапорці ios::left , ios::right та ios::internal взаємно виключають один одного. Прапорці ios::dec , ios::oct та ios::hex також взаємно виключають один одного. При модифікації основи можна використати константу ios::basefield в якості другого параметра функції setf. При заданні способу вирівнювання можна використовувати константу ios::ajustfield в якості другого параметра функції setf. При заданні нотації дійсних чисел можна використовувати константу ios::floatfield в якості другого параметра функції setf.

Методи управлiння прапорцями

long ios::flags(); - повертає бiжучi прапорцi потоку;

long ios::flags(long); - встановлює значення прапорцiв вiдповiдно до значення, яке є параметром функцiї; повертає попереднiй стан;

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

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

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

Приклад1(iгнорування пропускiв при вводi):

int i=0;

// вводимо ціле з необов’язковими пропусками спереду

//при читанні пропуски будуть проігноровані

cin >>i;

//видаляються символи, що залашились в потоці

cin.ignore(INT_MAX,’\n’);

//скидається прапорець skipws

cin.unsetf(ios::skipws);

// а ця операція вже не ігнорує пропуски

cin >>i;

//перевіряє наявність пропусків чи інших недопустимих символів

cin.good()? (cout<<'ви ввели'<<i<<endl):

(cout <<'неправильний ввiд'<<endl);

Приклад 2:

int x=1678;

cout <<x;

// зберігається значення прапорців

long savedFlags=cout.flags;

// встановити основу 16 з індикацією

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

cout <<x;

Приклад 3:

float f=2.3456789e6;

double d=3.0e9;

cout<<f<<‘\n’;

cout<<d<<‘\n’;

//вводити знак + для додатних значень

cout.self(ios::showpos);

cout<<f<<‘\n’;

cout<<d<<‘\n’;