Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи по програмуванні(14 лаб).doc
Скачиваний:
77
Добавлен:
16.05.2015
Размер:
1.43 Mб
Скачать

Маніпулятори

Незважаючи на гнучкість і великі можливості керування форматами за допомогою компонентних функцій класу ios, їхнє застосування достатнє громіздко. Більш простий спосіб із зобов'язання параметрів і прапорів форматування забезпечують маніпулятори, до можливостей яких ми перейдемо.

Маніпуляторами називають спеціальні функції, що дозволяють програмісту змінювати стани і прапори потоку. Особливість маніпуляторів і їхня відмінність від звичайних функцій полягає в тому, що їх імена (без параметрів) і виклики (з параметрами) можна використовувати в якості правого операнда для операції обміну. У якості лівого операнда в цьому вираженні, як звичайно, використовує- потік (посилання на потік), і саме на цей потік впливає маніпулятор.

Маніпулятори бібліотеки класів ios мови С++ поділяються на дві групи: маніпулятори з параметрами і маніпулятори без параметрів (табл. 13.3, 13.4).

Таблиця 13.3 - Маніпулятори без параметрів

dec

при введенні і виведення встановлює прапор десяткової системи числения;

hex

при введенні і виведення встановлює прапор шістнадцяткова системи числення;

oct

при введенні і виведення встановлює прапор восьмеричної системи числення;

Ws

діє тільки при введенні і передбачає витяг із вхідного потоку пробільных символів (пробіл, знаки табуляції ‘\t’ і ‘\v’, символ перекладу рядка '\n', символ повернення каретки '\г', символ перекладу сторінки ‘\f’);

endl

діє тільки при вивід, забезпечує включення у вихідний потік символу нового рядка і скидає буфер (вивантажує вміст) цього потоку;

ends

діє тільки при виведення і забезпечує включення в потік нульової ознаки кінця рядка

flush

діє тільки при виведення й очищає вихідний потік,тобто скидає його буфер (вивантажує вміст буфера).

Не всі перераховані маніпулятори діють як на вхідні, так і на вихідні потоки, ws діє тільки при введенні; endl, ends, flush - тільки при виведення.

setbase(int n)

установлює підстава (n) системи числення. Значеннями параметра n можуть бути: 0, 8, 10 чи 16. При використанні параметра 0 підстава числення при виведення вибирається десятичним. При введенні параметр 0 означає, що цілі десяти десятичні цифри з вхідного потоку повинні оброблятися правилам стандарту ANSI мови Сі

reaetiosf lags (long L)

скидає (очищає) окремі прапори стану потоці» введення і виведення на основі бітового представлення значення параметра L (скидає прапори відповідно до одиничних бітів);

setiosf lags (long L)

встановлює окремі прапори стану (форматні бити потоків введення-виведення на основі бітового представлення значення параметра l (установлюються прапори у відповідності c одиничними бітами параметра);

setfill(int n)

значення параметра n надалі використовується в якості кода символу-заповнювача, що міститься в незайнята позиціях поля при введенні значення. (Див. компонент х_fiel класу ios);

setprecision

(int n) "n~

визначає за допомогою значення параметра n точність представлення дійсних чисел, тобто максимальна кількість цифр дробової частини числа при введенні і виведення. (Див. компонент x_precision класу ios);

setw(int n)

значення параметра n задає мінімальну ширину поля в) вода. (Див. компонент x_width класу ios)

Таблиця 13.4 - Маніпулятори з параметрами визначені у файлі iomanip.h

Маніпулятори dec, hex, oct, що задають основу системи числення, змінюють стан потоку, і ця зміна залишається в силі до наступного явної зміни.

Маніпулятор endl рекомендується використовувати при кожнім виведення. Наприклад, його використання просте необхідно в такому операторі:

cout « "Чекайте! Йде набір статистики." « endl;

При відсутності endl тут не можна гарантувати, що повідомлення користувачу не залишиться в буфері потоку cout до закінчення набору статистики.

Рекомендується за допомогою маніпулятора flush скидати буфер вхідного потоку при виведення на екран підказки до наступного введення інформації:

cout « "Уведіть назву файлу:" « flush;

cin » fileName; // Тут fileName - символьний масив

За допомогою маніпуляторів можна керувати представленням інформації у вихідному потоці. Наприклад, маніпулятор setw(int n) дозволить виділити для числового значення поле фіксованої ширини, що зручно при печатці таблиць.