файлу заголовка может відрізнятіся на різніх машинах, альо інтерфейс, Який ВІН представляет є одноріднім.
Тип va_list вікорістовується для оголошення змінної, яка посілатіметься по-черзі до шкірного аргументу; в minprintf ця змінна назівається ap, як СКОРОЧЕННЯ від «argument pointer» (Покажчик на аргумент). Макрос va_start ініціалізує ap таким чином, щоб вона Вказував на перший безіменній аргумент. Макрос нужно віклікаті один раз до того, як використовуват ap. Звітність,, щоб був щонайменш один аргумент з іменем; Останній назв аргумент вікорістовується va_start, щоб розпочаті роботу. Кожний виклик va_arg повертає один аргумент и переводити ap до Наступний; va_arg вікорістовує Назву типу, щоб візначіті, Який тип повернути и наскількі великим винен буті крок. І, накінець, va_end здійснює очистку, ЯКЩО треба. Ее нужно віклікаті до того, як програма поверне свое значення.
ЦІ Властивості складають базу для Нашої спрощеної printf:
# include
/ * minprintf: Мінімальна printf Зі списком аргументів *
* змінної довжина * / minprintf (char * fmt,.)
{_list ap;/* Покажчик на шкірні безіменій аргумент *
* по черзі * / * p, * sval; ival; dval; _start (ap, fmt);/* Заставляє ap буті покажчики *
* на 1-ий безіменній аргумент * / (p=fmt; * p; p + +) {(* p!=«%») {(* p);;
} (* + + p) {«d»:=va_arg (ap, int); («% d», ival);; «f»:=va_arg (ap, double); («% f», dval);; «s»: (sval=va_arg (ap, char *); * sval; sval + +) (* sval);;: (* p);; p>
}
} _end (ap);/* Очистка * /
}
Функція scanf є аналогічною printf, альо Тільки для вводу. Вона надає Багато з тих самих можливіть Перетворення в зворотньому, правда, Напрямки.
scanf (char * format,.)
зчітує знаки Зі стандартного вводу, інтерпретуючі їх відповідно до спеціфікації, вказаній форматом (format), и зберігає результат помощью решті аргументів. Аргумент формату описано нижчих; решта аргументів, КОЖЕН з якіх винен буті покажчики, вказує на ті, де відповідній перетвореності ввід нужно Зберегти. Так само як и з printf, цею Розділ являється підсумком найкоріснішіх рис, а не вічерпнім опісом.зупіняється, ЯКЩО вона вічерпає свой список формату, або коли ввід НЕ співпадає Із Контрольну спеціфікацією. Вона повертає як значення числа ЕЛЕМЕНТІВ введенню, что співпалі и якіх Було присвоєно. Це можна вікорістаті, щоб взнати, Скільки об'єктів Було | Полтава. При завершенні файлу повертається EOF; зауважте, что не ті самє что й 0, Який означає, что Наступний символ вводиться не співпав Із дерло описування у ланцюжку форматування. Наступний виклик scanf відновіть продовжіть пошук, починаючі з місця, де Було оброблено Останній знак.
Існує такоже функція sscanf, яка читає свой ввід з ланцюжка вместо стандартного вводу: int sscanf (char * string, char * format, arg1, arg2,.)
Вона сканує ланцюжок, відповідно до формату format и зберігає Отримані значення в arg1, arg2 и так далі. Останні мают буті покажчики.
Ланцюжок формату, як правило, містіть опису Перетворення, что Використовують для Керування перетворенням вводу. Ланцюжок формату...