Функція виводу, 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. Напишіть програму, яка виводитиме довільний текст вводу у розумний спосіб. Як мінімум, вона повинна відображати неграфічні знаки як вісімкові або шістнадцяткові числа, в залежності від вашого бажання, окрім цього розбивати довгі рядки тексту.