русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Форматований вивід - printf


Дата додавання: 2014-11-28; переглядів: 2101.


Функція виводу, printf, обертає внутрішні значення на друковні знаки. Ми неформально застосовували printf у попередніх розділах. Опис, який ви знайдете тут, охоплює найтиповіші випадки використання функції, але не є повним; для всіх подробиць зверніться до Додатка Б.

int printf(char *format, arg1, arg2, ...);

printf перетворює, форматує і виводить свої аргументи на стандартний пристрій виводу згідно із форматом (format). Вона повертає кількість виведених символів.

Ланцюжок формату містить два типи об'єктів: звичайні символи, які буде копійовано до вивідного потоку і вказівники перетворення, кожен з яких призводить до, власне, перетворення і виводу кожного наступного аргументу printf. Кожний вказівник перетворення починається з %і закінчується знаком перетворення. Між % і цим знаком можуть також знаходитись, в даній послідовності:

  • Знак мінуса, що вказує вирівнювання з лівого боку перетвореного аргументу.
  • Число, яке вказує мінімальну ширину поля. Перетворений аргумент буде виведено у полі, щонайменше, цієї ширини. Якщо треба, то простір буде заповнено ліворуч (або праворуч, якщо вказано вирівнювання зліва) для того, щоб добитися потрібної ширини поля.
  • Крапка, яка відокремлює ширину поля від вказівника точності.
  • Число точності, яке вказує максимальну кількість знаків, що буде виведено з ланцюжка, або кількість цифр після десяткової крапки у випадку числа з рухомою точкою, або мінімальну кількість цифр цілого числа.
  • Знак h, якщо ціле буде виведене як коротке (short), або l (англійська літера «л»), якщо як довге (long).

Символи перетворення показано в Таблиці 7.1. Якщо знак після % не являється вказівником перетворення, поводження залишеться невизначеним.

Таблиця 7.1 Основні перетворення printf
Знак Тип аргументу Виводиться як
d, i int десяткове число.
o int беззнакове вісімкове число (без нуля попереду).
x, X int беззнакове шістнадцяткове число (без 0x або 0X попереду), використовуючи abcdef або ABCDEF замість 10, ..., 15.
u int беззнакове ціле число.
c int один знак.
s char * виводить знаки ланцюжка до '\0' або тієї кількості знаків, яку задано вказівником точності.
f double [-]m.dddddd, де кількість d задано вказівником точності (за замовчуванням - 6).
е, Е double [-]m.dddddde+/-xx або [-]m.ddddddE+/-xx, де кількість dзадано вказівником точності (за замовчуванням - 6).
g, G double застосовувати %e або %E, якщо показник степеня менший за -4 або більший за або рівний точності; у протилежному випадку, використовувати %f. Хвостові нулі і хвостова десяткова крапка не виводяться.
p void * покажчик (представлення залежить від реалізації).
%   жодного аргументу не перетворено, вивести %.

Ширина або точність можуть бути вказаними як *, у такому разі, значення обчислюється шляхом перетворення наступного аргументу (який повинен бути типу int). Наприклад, щоб вивести, щонайбільше, max знаків ланцюжка s, ми можемо написати

printf("%.*s", max, s);

Більшість перетворень формату було проілюстровано в попередніх розділах. Одним виключенням є точність, так як вона має відношення до ланцюжків. Наступна таблиця демонструює ефект різних означень для виводу «hello, world» (12 знаків). Ми додали двокрапки навколо кожного поля, щоб було видно їхній розмір.

:%s: :hello, world:

:%10s: :hello, world:

:%.10s: :hello, wor:

:%-10s: :hello, world:

:%.15s: :hello, world:

:%-15s: :hello, world :

:%15.10s: : hello, wor:

:%-15.10s: :hello, wor :

Застереження: printf використовує свій перший аргумент для того, щоб дізнатися як багато аргументів в цілому і який їхній тип. Вона заплутається і ви отримаєте неправильний результат, якщо недостатньо аргументів або вони неправильного типу. Вам також слід знати про відмінність цих двох викликів:

printf(s); /* ЗАЗНАЄ НЕВДАЧІ, якщо s містить % */

printf("%s", s); /* БЕЗПЕЧНИЙ для використання */

Функція sprintf здійснює ті самі перетворення, що й printf, але зберігає свій вивід у ланцюжку:

int sprintf(char *string, char *format, arg1, arg2, ...);

sprintf форматує аргументи arg1, arg2 і так далі, відповідно до формату (format), як і раніше, але результат в ланцюжку (string) замість стандартного виводу; string повинен бути досить великим, щоб втримати результат.

Вправа 7-1. Напишіть програму, яка виводитиме довільний текст вводу у розумний спосіб. Як мінімум, вона повинна відображати неграфічні знаки як вісімкові або шістнадцяткові числа, в залежності від вашого бажання, окрім цього розбивати довгі рядки тексту.


<== попередня лекція | наступна лекція ==>
Стандартний ввід і вивід | Списки аргументів довільної довжини


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн