Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / ооп / 4_кол / Лекції / ООП (16. Робота з потоками).doc
Скачиваний:
23
Добавлен:
30.05.2020
Размер:
240.13 Кб
Скачать

Використання функції cout.Width()

За умовчанням ширина поля виводу автоматично встановлюється такій, аби точно вміщати всі символи рядка з буфера виводу. Але за допомогою функції width() можна встановити точне значення ширини поля виводу. Ця функція викликається як метод об'єкту cout, оскільки є його функцією-членом. Функція width() змінює ширину лише наступного поля виводу. Використання цієї функції проілюстроване в лістингу 12.

Лістинг 12. Налаштування ширини поля виводу

1: // Листинг 12. Настройка ширины поля вывода

2: #include <iostream.h>

3:

4: int main()

5: {

6:    cout << "Start >";

7:    cout.width(25);

8:    cout << 123 << "< End\n";

9:

10:   cout << "Start >";

11:   cout.width(25);

12:   cout << 123 << "< Next >";

13:   cout << 456 << "< End\n";

14:

15:   cout << "Start >";

16:   cout.width(4);

17:   cout << 123456 << "< End\n";

18:

19:   return 0:

20: }

Результат:

Start >         123< End

Start >         123< Next >456< End

Start >123456< End

Аналіз: Спочатку (рядки 6—8) число 123 виводиться в полі шириною в 25 символів. Ширіна поля задається в рядку 7. Результат цього форматування показаний в першому рядку виводу.

У другому рядку виводу значення 123 роздруковується знову ж таки в полі шириною 25, а потім відразу ж виводиться значення 456. Як бачите, установка ширини поля застосовується лише перший раз, а для другого вираження з об'єктом cout вже не діє. Таким чином, установки функції width() застосовуються лише до наступного вираження виведення даних.

У останньому рядку виводу видно, що установка ширини поля меншою розміру значення, що заноситься в нього, ігнорується програмою. В цьому випадку ширина поля встановлюється рівною розмірам даних, що виводяться.

Установка символів заповнення

Зазвичай об'єкт cout заповнює пропусками порожні позиції поля, задані функцією width(), як було показано в наведеному вище прикладі. Проте інколи виникає необхідність заповнити порожні позиції іншими символами, наприклад зірочками (*). Для цього потрібно використовувати функцію fill(), у параметрі якої вказати символ заповнення. Використання функції fill() показано в лістингу 13.

Лістинг 13. Використання функції fill()

1: // Листинг 13. Функция fill()

2:

3: #include <iostream.h>

4:

5: int main()

6: {

7:    cout << "Start >";

8:    cout.width(25);

9:    cout << 123 << "< End\n";

10:

11:

12:   cout << "Start >";

13:   cout.width(25);

14:   cout.fill('*');

15:   cout << 123 << "< End\n";

16:   return 0;

17: }

Результат:

Start >                  123< End

Start >******************123< End

Аналіз: Рядки 7—9 переписані з попереднього лістингу. То ж можна сказати і про рядки 12—15, проте в рядку 14 цього лістингу використовується функція fill('*') для установки символу зірочки (*) як символ заповнення, що Наочно відбивається у виведенні програми.

Порівняння потоків і функції printf()

Більшість версій компіляторів C++ включають також стандартні бібліотеки введення-виведення мови С, що дозволяють використовувати для цього функцію printf(). Хоча використовувати printf() трохи простіше, ніж cout, застосовувати її не бажано.

Функція printf() не забезпечує належного контролю за типами даних, тому можна легко помилитися і відображувати число як символ або символ як число. Крім того, функція printf() не підтримує класи, тому її важко використовувати для виведення даних об'єктів класів. Доводиться задавати кожен член класу для p r i n t f () окремо.

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

Для використання функції printf() необхідно включити в програму файл заголовка stdio.h. У найпростішій формі функція printf() приймає як параметр рядок для форматованого виводу у вигляді тексту, узятого в лапки. Перед рядком можуть бути встановлені самі різні набори специфікаторів форматування. У таблиці. 1 показані найбільш часто використовувані специфікатори перетворень типів, що починаються завжди з символу %.

Таблиця 1. Специфікатори перетворення типів

 

Каждый спецификатор преобразования может также дополняться установкой общего числа знаков в выводимом значении и числа знаков после десятичной запятой. Эта установка имеет вид десятичного значения с плавающей точкой, где символы слева от точки устанавливают общее число знаков в выводимых значениях, а символы справа — число знаков после запятой. Например, спецификатор %5d задает вывод целочисленного значения длиной 5 знаков, а %15.5f — вывод числа с плавающей запятой общей длиной в 15 знаков, пять из которых составляют дробную часть. Различные способы использования printf() показаны в листинге 15.