- •Буферизація
- •Потоки і буфери
- •Стандартні об'єкти введення-виводу
- •Лістинг 3. Введення рядка значень
- •Результат:
- •Введення рядків із стандартного пристрою введення
- •Результат:
- •Використання функції cout.Width()
- •Результат:
- •Лістинг 15. Вывод данных с помощью фцнкции printf()
- •Результат:
- •Лістинг 16. Відкриття файлу для читання і запису
- •Результат:
- •Налаштування відкриття файлу об'єктом ofstream
- •Лістинг 17. Додавання даних в кінець файлу
- •Результат:
- •Двійкові і текстові файли
- •Лістинг 18. Запис класу у файл
- •Результат:
- •Установка параметрів введення-виводу за допомогою коммандной рядка
- •Лістинг 20. Використання аргументів командного рядка
- •Результат:
- •Питання і відповіді
Використання функції 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.