setvbufуправляет буферизацией потока; к ней следует обращаться прежде, чем будет выполняться чтение, запись или какая-либо другая операция, mode со значением _IOFBFвызывает полную буферизацию, с _IOLBF- "построчную" буферизацию текстового файла, a mode со значением _IONBFотменяет всякую буферизацию. Если параметр buf не есть NULL, то его значение - указатель на буфер, в противном случае под буфер будет запрашиваться память. Параметр size задает размер буфера. Функция setvbuf в случае ошибки выдает ненулевое значение.
void setbuf(FILE *stream, char *buf);
Если buf есть NULL, то для потока stream буферизация выключается. В противном случае вызов setbufприведет к тем же действиям, что и вызов (void) setvbuf (stream, buf, _IOFBF, BUFSIZ).
Функции printfосуществляют вывод информации по формату.
int fprintf(FILE *stream, const char *format, ...);
fprintfпреобразует и пишет вывод в поток stream под управлением format . Возвращаемое значение - число записанных символов или, в случае ошибки, отрицательное значение.
Форматная строка содержит два вида объектов: обычные символы , копируемые в выводной поток, и спецификации преобразования , которые вызывают преобразование и печать остальных аргументов в том порядке, как они перечислены. Каждая спецификация преобразования начинается с %и заканчивается символом-спецификатором преобразования. Между % и символом- спецификатором в порядке, в котором они здесь перечислены, могут быть расположены следующие элементы информации:
• Флаги (в любом порядке), модифицирующие спецификацию:
- |
указывает на то, что преобразованный аргумент должен быть прижат к левому краю поля; |
+ |
предписывает печатать число всегда со знаком; |
пробел |
если первый символ - не знак, то числу должен предшествовать пробел; |
0 |
указывает, что числа должны дополняться слева нулями до всей ширины поля; |
# |
указывает на одну из следующих форм вывода: для o первой цифрой должен быть 0; для x или X ненулевому результату должны предшествовать 0x или 0X; для e , E , f , g и G вывод должен обязательно содержать десятичную точку; для g и G завершающие нули не отбрасываются. |
• Число, специфицирующее минимальную ширину поля. Преобразованный аргумент будет напечатан в поле, размер которого не меньше указанной ширины, а если потребуется, в поле большего размера. Если число символов преобразованного аргумента меньше ширины поля, то поле будет дополнено слева (или справа, если число прижимается к левому краю). Обычно поле дополняется пробелами (или нулями, если присутствует флаг дополнения нулями).
• Точка, отделяющая указатель ширины поля от указателя точности.
• Число, задающее точность, которое специфицирует максимальное количество символов, печатаемых из строки, или количество цифр после десятичной точки в преобразованиях e, E или f, или количество значащих цифр для g или G - преобразования, или минимальное количество цифр при печати целого (до необходимой ширины поля число дополняется слева нулями).
• Модификаторы h, l(буква ell) или L. "h" указывает на то, что соответствующий аргумент должен печататься как short или unsigned short ; "l" сообщает, что аргумент имеет тип long или unsigned long ; "L" информирует, что аргумент принадлежит типу long double .
Ширина, или точность, или обе эти характеристики могут быть специфицированы с помощью *; в этом случае необходимое число "извлекается" из следующего аргумента, который должен иметь тип int (в случае двух звездочек используются два аргумента).
Символы-спецификаторы и разъяснение их смысла приведены в таблице B-1. Если за %нет правильного символа-спецификатора, результат не определен.
int printf(const char *format, ...);
printf(...) полностью эквивалентна fprintf (stdout, ...).
int sprintf(char *s, const char *format, ...)
sprintfдействует так же, как и printf , только вывод осуществляет в строку s , завершая ее символом '\0'. Строка s должна быть достаточно большой, чтобы вмещать результат вывода. Возвращает количество записанных символов, в число которых символ '\0' не входит.
int vprintf (const char *format, va_list arg)
int vfprintf (FILE *stream, const char *format, va_list arg)
int vsprintf (char *s, const char *format, va_list arg)
Читать дальше