ового шістнадцяткове число (без 0x або 0X Попереду), вікорістовуючі abcdef або ABCDEF вместо 10,., 15. uint беззнакового ціле число. cint один знак. schar * виводу знаки ланцюжка до « 0» або тієї кількості знаків, якові задано вказівніком точності. fdouble [-] m. dddddd, де кількість d задано вказівніком точності (за замовчуванням - 6). е, Еdouble [-] m. dddddde + /-xx або [-] m. ddddddE + /-xx, де кількість d задано вказівніком точності (за замовчуванням - 6). g, Gdouble застосовуваті% e або% E, ЯКЩО Показник степеня менший за - 4 або більшій за або Рівний точності; у протилежних випадка, використовуват% f. Хвостові нулі и Хвостова Десяткова крапка НЕ ??віводяться. pvoid * покажчик (представлення поклади від реалізації). % Жодний аргументи не перетворено, вивести%.
Ширина або точність могут буті Вказаною як *, у такому разі, значення обчіслюється путем Перетворення Наступний аргументу (Який винен буті типу int). Наприклад, щоб вивести, щонайбільше, max знаків ланцюжка s, Ми можемо Написати printf ("%. * S», max, s);
Більшість перетвореності формату Було проілюстровано в попередніх Розділах. Одним віключенням є точність, так як вона має відношення до ланцюжків. Наступна таблиця демонструє ефект різніх Означення для виводу «hello, world» (12 знаків). Мі додали двокрапкі вокруг шкірного поля, щоб Було видно їхній розмір.
:% s :: hello, world:
:% 10s :: hello, world:
:% .10 s :: hello, wor:
:% - 10s :: hello, world:
:% .15 s :: hello, world:
:% - 15s :: hello, world:
:% 15.10s :: hello, wor:
:% - 15.10s :: hello, wor:
застережень: printf вікорістовує свой перший аргумент для того, щоб дізнатіся як Багато аргументів в цілому и Який їхній тип. Вона заплутається и ві отрімаєте неправильний результат, ЯКЩО недостатньо аргументів або смороду неправильного типу. Вам такоже слід знаті про відмінність ціх двох вікліків:
(s);/* ЗАЗНАЄ НЕВДАЧІ, ЯКЩО s містіть% * / («% s», s);/* Безпечний для Використання * /
Функція sprintf здійснює ті Самі Перетворення, что й printf, альо зберігає свой вивід у ланцюжку: int sprintf (char * string, char * format, arg1, arg2,.); sprintf форматує аргументи arg1, arg2 и так далі, відповідно до формату (format), як и раніше, альо результат в ланцюжку (string) вместо стандартного виводу; string винен буті й достатньо великим, щоб втріматі результат.
Оскількі ми, головних чином, зацікавлені в опрацьовуванні аргументів, minprintf оброблятіме форматувальній ланцюжок и аргументи, альо віклікатіме Дійсний printf для перетвореності формату. Чіннім Оголошення printf є int printf (char * fmt,.) Де. означає, что кількість и тіпі ціх аргументів может відрізнятіся. Оголошення. может Тільки з'являтися в кінці списку аргументів. Нашу minprintf оголошено як void minprintf (char * fmt,.) Оскількі Ми не повертатімемо відлік сімволів, як це Робить printf.
Делікатній момент Полягає в тому, як minprintf просувається через список аргументів, в тій годину як сам список даже НЕ має имени. Стандартний файл заголовка містіть набор макросів, Який візначає, як проходити список аргументів. Втілення цього ...