Функция printf() поддерживает два дополнительных модификатора для некоторых спецификаторов формата: * и #.
Помещение # перед g, G, f, Е или е обеспечивает наличие десятичной точки в случае отсутствия дробной части. Если перед спецификаторами формата х или X поставить #, то шестнадцатиричное число будет печататься с префиксом 0х. Если перед спецификатором о поместить #, то выведенное число будет иметь в начале 0. Нельзя применять # к остальным спецификаторам формата.
Помимо констант, спецификаторы минимальной ширины поля и точности могут предоставляться аргументами printf(). Для реализации этого следует использовать *. Когда форматная строка сканируется, функция printr() будет сопоставлять со звездочкой аргументы в порядке появления.
Например,
printf("%*.*f", 10,4,123.3);
минимальная ширина поля равна 10, точность - 4, а вводимое значение 123.3
Следующая программа демонстрирует использование # и *
#include <stdio.h>
int main(void)
{
printf("%х %#x\n", 10, 10);
printf("%*.*f", 10, 4, 1234.34);
return 0;
}