Стандартная функция консольного вывода в языке C - printf. Описание её содержится в заголовочном файле stdio.h. При помощи этой функции можно выводить данные или пользовательские сообщения в консоль. Язык C чувствителен к регистру. К примеру, две функции printf и scanf отличаются от подобных им Printf и Scanf. Все символы в функциях printf и scanf также должны быть записаны в нижнем регистре. Одним из простейших примеров C printf, выводящим на экран знакомое приветствие hello world, является:
Определение функций группы printf в файле "stdio.h"
Файл "stdio.h" относится к стандартной библиотеке ввода/вывода в языке С. Описание printf и подобных ей функций приводится в нём следующим образом:
Перечисленные функции производят загрузку данных из определённых локаций, преобразовывают их в символьную строку, отправляют в заданные потоки вывода.
Семейство функций printf
Функции группы printf в языке C служат для обработки и форматированного вывода данных в стандартный поток. Причём функции printf и vprintf производят запись в стандартный поток stdout, функции fprintf и vfprintf отправляют значения выводимых аргументов в некоторый заданный выходной поток, а snprintf, sprintf, vsnprintf и vsprintf записывают данные в символьную строку. Все перечисленные функции работают с использованием строки формата, указывающей необходимые преобразования аргументов для вывода.
Функция fprintf записывает результат в выходной поток stream. В буфер, представляющий собой символьную строку, выводит результат функция sprintf. Поведение функции не определено, если подлежащая выводу строка превышает размер массива буфера.
Функция snprintf так же, как и предыдущая, записывает данные в строковый буфер. Полученная строка символов завершается нулевым символом, если только bufsz (размер буфера) не равен нулю. Иначе, если значение bufsz равно нулю, то в буфер ничего не выводится, а сам буфер вполне может являться нулевым указателем, но возвращаемое значение (количество байтов, которое должно было быть записано) все равно вычисляется.
Функция printf_s в целом действует тем же образом, что и printf, за исключением одного момента. Главным отличием в описании printf_s в C и printf является следующее: функция printf_s выполняет проверку строки форматирования на наличие допустимых символов в отличие от printf, которая только проверяет строку формата на предмет пустого указателя.
Подробнее рассмотрим функцию printf.
Общее описание
В языке C печать символов через стандартный поток вывода осуществляется посредством вызова функции printf. Команда printf в C форматирует набор выводимых данных, и они отправляются в стандартный поток вывода stdout. Значения, переданные в качестве аргументов функции, выводятся в консоль согласно указанной строке форматирования, которая в свою очередь заключает в себе две разновидности элементов. Первая разновидность - это символы, выводимые на экран, а элементы, определяющие особенности формата данных и отвечающие за метод представления аргументов при выводе, относятся ко второму виду.
При выводе переменных с printf в C особые комбинации символов в строке аргументов заменяются на преобразованные в соответствии с этими символами данные, причём для каждого типа данных существуют свои спецификации формата вывода.
Тип функции и возвращаемое значение
Функция printf, имеющая возвращает целочисленную величину, обозначающую количество напечатанных на экране символов. К примеру, можно присвоить:
int k = printf("Привет %c %d %s", "a", 11, "всем!"),
и тогда по значению переменной k легко определяется, возникла ли ошибка при выводе. В случае возврата отрицательного значения (если функция вернула "-1") можно сделать вывод, что произошла ошибка при её выполнении.
Синтаксис и зависимости
Чтобы использовать функцию printf, требуется подключить заголовочный файл "stdio.h" следующим образом:
#include
Шаблон функции выглядит:
int printf(const char *формат, ...)
Под многоточием подразумевается список аргументов, подлежащих выводу. Функция printf может быть использована с различным числом аргументов, но первый из них всегда ограничивается с обеих сторон двойными кавычками, а каждый последующий необходимо отделять от предыдущего запятой. То, что записано в двойных кавычках и при том не является спецификацией формата, печатается без изменений, иначе, если встретился спецификатор, копируется тип его значения.
Форма задания спецификаций формата:
%[флаги][ширина][.позиция][длина]тип
Форматирование с printf в C выходных значений
Чтение строки формата, указываемой в круглых скобках после имени вызываемой функции, происходит только в одну сторону: слева направо, и первый аргумент, указанный после самой этой строки, выводится лишь в том случае, если встретилась первая спецификация. До тех пор, пока не кончится строка формата, указанные в ней спецификации будут инициировать преобразование и печать последующих аргументов. В строке формата знак пробела рассматривается, как обычный символ и передаётся на вывод в случаях, когда он не используется в выражении спецификации формата.
Символ "%" указывает на начало спецификации формата вывода, следом за ним идёт код формата. Все поля в спецификации представляют собой отдельные, определяющие условия форматирования числа или символы.
Форматированный вывод printf в C обладает своими особенностями. В случае, если количество перечисленных аргументов превышает число спецификаций формата, они пропускаются и не выводятся. Иначе, если спецификаций формата больше, чем значений в списке подлежащих печати аргументов, результат вызова функции не определяется.
Для явного указания, который по счёту аргумент нужно задействовать, возможно использовать "%m$" вместо "%" и "*m$" вместо "*", причём m, целочисленное десятичное значение, обозначает позицию нужного аргумента (индексирование начинается с единицы).
Параметры
Флаг | Описание |
- | Выравнивание результата по левому краю в поле вывода |
+ | При выводе численного значения, имеющего знак, принудительно печатается "+" перед положительной величиной (по умолчанию выводится только "-" перед отрицательным значением) |
0 | Для целых чисел и чисел с плавающей запятой ведущие нули используются вместо символов пробела для заполнения левых разрядов в случае, если задана ширина поля, превышающая длину числа. Для целых чисел флаг игнорируется, если явно указана точность. Для других преобразований с использованием этого флага поведение функции не определено. Флаг "0" не учитывается, если присутствует флаг "-" |
space | Если результат вывода выражения, имеющего знак, не начинается с символа этого знака или пуст, то пробел добавляется к результату. Флаг "space" игнорируется, если присутствует флаг "+" |
# | Выполняется альтернативная форма преобразования |
Различные спецификаторы формата
Спецификатор формата | Использование и описание для printf C | Тип аргумента |
% | Запись литерала "%" | |
c | Вывод одного символа. Происходит преобразование аргумента в тип unsigned char. При использовании модификатора "l" аргумент преобразуется в строку символов | unsigned char |
s | Печать строки символов. Аргумент должен являться указателем на начальный элемент массива символов char | char * |
d i | Вывод десятичного представления целочисленного значения со знаком | int |
o | Вывод восьмеричного представления без знакового целочисленного значения | unsigned int |
x X | Вывод шестнадцатеричного представления без знакового целочисленного значения. Символы "a", "b", "c", "d", "e", "f" применяются для преобразования "x". А для преобразования "X" - "A", "B", "C", "D", "E", "F" | unsigned int |
u | Вывод десятичного преобразования без знакового целочисленного значения. Если преобразованное значение и точность вместе равны 0, то символы не выводятся | unsigned int |
f F | Вывод десятичного представления числа с плавающей запятой, имеющего знак | double |
e E | Вывод десятичного экспоненциального представления округлённого и преобразованного так, что перед запятой остаётся одна цифра, а количество цифр после запятой соответствует точности представления (по умолчанию точность равна 6, а если указан 0, то символ запятой не выводится вообще). Символ "е" выводится в верхнем или нижнем регистре в зависимости от преобразования | double |
a A | Вывод шестнадцатеричного представления числа с плавающей запятой | double |
g G | Вывод десятичного представления числа с плавающей запятой или его десятичного экспоненциального представления в зависимости от значения и точности | double |
n | Возврат числа элементов, выведенных функцией printf. Результат записывается в переменную, на которую указывает аргумент. Спецификация может не содержать флагов, ширины поля или точности | int * |
p | Вывод указателя | void * |
Модификатор ширины поля
В строке формата в printf C может быть записано целое число после знака процента и перед командой форматирования. Оно является модификатором ширины поля и влияет на представление отображаемых данных. Наименьшая ширина поля, предназначенная для значения, определяется этим числом, и присутствие такого модификатора в случае, если аргумент оказывается меньше выделенного ему поля, вызывает добавление к результату пробелов или нулей. Заполнителем по умолчанию служит символ пробела, однако можно установить ноль, прописав его перед спецификацией ширины. Модификатор указывает минимум ширины, и любое превышающее этот минимум значение будет напечатано без помех. Число, к примеру, состоящее менее чем из восьми символов и печатаемое со спецификацией "%08d", окажется дополненным до необходимых восьми знаков нулями.
Подобные модификаторы могут также задавать параметры точности или выравнивания.
Модификатор точности
Модификатор точности служит для определения числа печатаемых десятичных знаков в представлении чисел. Для добавления модификатора точности необходимо поставить точку после спецификации ширины поля и указать нужное значение точности после неё. Модификатор точности определяется для "e", "f", "a", "E", "A" и "F" форматов. Для целых чисел модификатор устанавливает количество отображаемых цифр, добавляя нули в левый разряд, если нужно, а при выводе рациональных чисел определяет необходимое количество знаков после запятой. Применительно к строковым переменным: следующее после точки число в модификаторе точности служит определителем максимальной длины поля при выводе. К примеру, при заданной спецификации формата "%4.8s" будет выведена строка, длина которой находится в диапазоне от четырёх до восьми символов, в случае превышения крайние символы будут опущены.
Другие модификаторы формата
Выравниванием по умолчанию является выравнивание по правому краю, однако это можно изменить, поставив знак "-" после "%". Такая спецификация формата устанавливает выравнивание по левому краю.
Кроме того, функция printf способна различать короткие и длинные типы выводимых целых значений. Допустимые спецификаторы: "о", "d", "u", "i", "x" и "X". Длинный тип значения устанавливается модификатором "l", а короткий - модификатором "h". Например, при выводе длинного целого числа и значения типа short unsigned int спецификации формата выглядят как "%ld" и "%hu" соответственно.
Примеры
1. Описание printf C и результаты вызова каждой функции:
2. Вывод на экран простого диалогового сообщения:
printf("сообщение");
3. Программный код:
Выражения, заданные в перед спецификациями формата, печатаются на экране, также как и следующие за строкой формата аргументы. Результат выполнения приведённых выше функций printf C, описание выходных данных:
Данный пример иллюстрирует вывод на экран при помощи различных форматов строк, целочисленных переменных, символов, а также чисел с плавающей точкой.
Стандартная функция ввода scanf и примеры её использования
Функция scanf используется для чтения вводимых с клавиатуры данных. Описание printf и scanf в C представлено в заголовочном файле "stdio.h".
scanf("format specifiers",&value1,&value2, ...);
Простой пример работы с функцией scanf:
#include
(PHP 4, PHP 5, PHP 7)
sprintf — Возвращает отформатированную строку
Список параметров
Строка формата состоит из нуля и более директив: обычных символов (за исключением % ), которые копируются напрямую в результирующую строку, и описателей преобразований , каждый из которых заменяется на один из параметров. Это относится как к sprintf() , так и к printf() .
Каждый описатель преобразований состоит из знака процента (% ), за которым следует один или более дополнительных элементов (в том порядке, в котором они здесь перечислены):
- Необязательный описатель знака , указывающий как знак (- или +) будет применен к числу. По умолчанию, используется только знак минус, если число отрицательное. Этот описатель заставляет положительные числа также отображать знак плюс, он был добавлен в PHP 4.3.0.
- Необязательный описатель заполнения , который определяет, какой символ будет использоваться для дополнения результата до необходимой длины. Это может быть пробел или 0 . По умолчанию используется пробел. Альтернативный символ может быть указан с помощью одиночной кавычки (" ). См. примеры ниже.
- Необязательный описатель выравнивания , определяющий выравнивание влево или вправо. По умолчанию выравнивается вправо, - используется для выравнивания влево.
- Необязательное число, описатель ширины , определяющий минимальное число символов, которое будет содержать результат этого преобразования.
- Необязательный описатель точности , указанный в виде точки ("."), после которой следует необязательная строка из десятичных чисел, определяющая, сколько десятичных разрядов отображать для чисел с плавающей точкой. При использовании со строками этот описатель выступает в роли обрезающей точки, устанавливающей максимальный лимит символов. Также между точкой и цифрой можно указать символ, используемый при дополнении числа.
Описатель типа , определяющий, как трактовать тип данных аргумента. Допустимые типы:
- % - символ процента. Аргумент не используется.
- b - аргумент трактуется как целое и выводится в виде двоичного числа.
- c - аргумент трактуется как целое и выводится в виде символа с соответствующим кодом ASCII.
- d - аргумент трактуется как целое и выводится в виде десятичного числа со знаком.
- e - аргумент трактуется как число в в научной нотации (например, 1.2e+2). Описатель точности указывает на количество знаков после запятой, начиная с версии PHP 5.2.1. В более ранних версиях он обозначал количество значащих цифр (на один знак меньше).
- E - аналогично %e , но использует заглавную букву (например, 1.2E+2).
- f - аргумент трактуется как число с плавающей точкой и также выводится в зависимости от локали.
- F - аргумент трактуется как число с плавающей точкой и также выводится, но без зависимости от локали. Доступно, начиная с версии PHP 4.3.10 и PHP 5.0.3.
- g %e и %f .
- G - выбирает самую краткую запись из %E и %f .
- o - аргумент трактуется как целое и выводится в виде восьмеричного числа.
- s - аргумент трактуется как строка.
- u - аргумент трактуется как целое и выводится в виде десятичного числа без знака.
- x - аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в нижнем регистре).
- X - аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в верхнем регистре).
Переменные будут преобразованы в соответвующий тип для спецификатора:
Тип | Спецификатор |
---|---|
string | s |
integer | d , u , c , o , x , X , b |
double | g , G , e , E , f , F |
Внимание
Попытка использовать комбинацию строк и спецификаторов ширины с кодировками, которые требуют более одного байта на символ, может привести к неожиданным результатам.
В строке формата поддерживается нумерация и изменение порядка параметров. Например:
Пример #1 Изменение порядка параметров
$num
=
5
;
$location
=
"дереве"
;
$format
=
"%d обезьян сидят на %s"
;
?>
Этот код выведет "5 обезьян сидят на дереве". Теперь представьте, что строка формата содержится в отдельном файле, который потом будет переведен на другой язык, и мы переписываем ее в таком виде:
Пример #2 Изменение порядка параметров
$format
=
"На %s сидят %d обезьян"
;
echo
sprintf
($format
,
$num
,
$location
);
?>
Появляется проблема: порядок описателей преобразования не соответствует порядку аргументов. Мы не хотим менять код, и нам нужно указать, какому аргументу соответствует тот или иной описатель преобразования.
Пример #3 Изменение порядка параметров
$format
=
"На %2$s сидят %1$d обезьян"
;
echo
sprintf
($format
,
$num
,
$location
);
?>
Нумерация аргументов имеет еще одно применение: она позволяет вывести один и тот же аргумент несколько раз без передачи функции дополнительных параметров.
Пример #4 Изменение порядка параметров
$format
=
"На %2$s сидят %1$d обезьян.
Как здорово, когда на %2$s сидят %1$d обезьян."
;
echo
sprintf
($format
,
$num
,
$location
);
?>
При изменении порядка параметров описатель позиции n$ должен идти сразу за знаком процента (% ) прежде всех остальных описателей, как показано в примере ниже.
Пример #5 Указание дополняющего символа
echo
sprintf
("%".9d\n"
,
123
);
echo
sprintf
("%".09d\n"
,
123
);
?>
123 000000123
Пример #6 Использование описателя позиции и совместно с другими описателями
$format
=
"На %2$s сидят %1$04d обезьян"
;
echo
sprintf
($format
,
$num
,
$location
);
?>
Результат выполнения данного примера:
На дереве сидят 0005 обезьян
Замечание :
Попытка использовать спецификатор позиции, больший чем PHP_INT_MAX , приведет к генерации предупреждения функцией sprintf() .
Внимание
The c type specifier ignores padding and width
Возвращаемые значения
Возвращает строку, отформатированную в соответствии со строкой format .
Примеры
Пример #7 sprintf() : заполнение нулями
$n
=
43951789
;
$u
= -
43951789
;
$c
=
65
;
// ASCII 65 is "A"
// заметьте, двойной %% выводится как одинарный "%"
printf
("%%b = "%b"\n"
,
$n
);
// двоичное представление
printf
("%%c = "%c"\n"
,
$c
);
// выводит символ ascii, аналогично функции chr()
printf
("%%d = "%d"\n"
,
$n
);
// обычное целое число
printf
("%%e = "%e"\n"
,
$n
);
// научная нотация
printf
("%%u = "%u"\n"
,
$n
);
// беззнаковое целое представление положительного числа
printf
("%%u = "%u"\n"
,
$u
);
// беззнаковое целое представление отрицательного числа
printf
("%%f = "%f"\n"
,
$n
);
// представление числа с плавающей точкой
printf
("%%o = "%o"\n"
,
$n
);
// восьмеричное представление
printf
("%%s = "%s"\n"
,
$n
);
// строка
printf
("%%x = "%x"\n"
,
$n
);
// шестнадцатеричное представление (нижний регистр)
printf
("%%X = "%X"\n"
,
$n
);
// шестнадцатеричное представление (верхний регистр)
Printf
("%%+d = "%+d"\n"
,
$n
);
// описатель знака с положительным целым числом
printf
("%%+d = "%+d"\n"
,
$u
);
// описатель знака с отрицательным целым числом
?>
Результат выполнения данного примера:
%b = "10100111101010011010101101" %c = "A" %d = "43951789" %e = "4.39518e+7" %u = "43951789" %u = "4251015507" %f = "43951789.000000" %o = "247523255" %s = "43951789" %x = "29ea6ad" %X = "29EA6AD" %+d = "+43951789" %+d = "-43951789"
Пример #8 printf() : описатели строк
$s
=
"monkey"
;
$t
=
"many monkeys"
;
Printf
("[%s]\n"
,
$s
);
// обычный вывод строки
printf
("[%10s]\n"
,
$s
);
// выравнивание вправо с пробелами
printf
("[%-10s]\n"
,
$s
);
// выравнивание влево с пробелами
printf
("[%010s]\n"
,
$s
);
// дополнение нулями также работает со строками
printf
("[%"#10s]\n"
,
$s
);
// использование собственного дополняющего символа "#"
printf
("[%10.10s]\n"
,
$t
);
// выравнивание влево с обрезкой в 10 символов
?>
printf ("как форматировать", парметр1, параметр2, ...) -- выводит результат на экран
$result=sprintf ("..", .., .., ...) - тоже самое, только строка не выводиться, а помещается в $result
Цитата из перевода мануала (ПРИМЕРЫ ниже:-):
sprintf
sprintf -- возвращает форматированную строкуОписание
sprintf (string format, mixed ...);Возвращает строку, обрабатываемую в соответствии с форматирующей строкой format .
Форматирующая строка, содержащая ноль или более директив: обычные символы (кроме %) которые копируются прямо в результат, и that are copied directly to the result, и описания изменений , каждое из которых выполняет определенные действия. Это применительно и к sprintf() и к printf()
Каждое описание изменений состоит из следующих элементов, в порядке:
Описатель типа , который говорит о том, как тип данных аргумента должен трактоваться. Возможные типы:
% - символ процента. Аргумент не требуется. b - аргумент трактуется как integer и представляется как двоичное число. c - аргумент трактуется как integer и представляется как символ с ASCII значением. d - аргумент трактуется как integer и представляется как десятичное число. f - аргумент трактуется как double и представляется как число с плавающей точкой. o - аргумент трактуется как integer и представляется как восьмиричное число. s - аргумент трактуется и представляется как строка. x - аргумент трактуется как integer и представляется как шестнадцатиричное число (с буквами в нижнем регистре). X - аргумент трактуется как integer и представляется как шестнадцатиричное число (с буквами в верхнем регистре).
Дополнительный описатель заполнения , который говорит, какие символы будут использоваться для заполнения результата до правильног размера строки. Это могут быть пробелы или 0 (символ нуля). По умолчанию заполняется пробелами. Алтернативный символ заполнения может быть определен одинарной кавычкой ("). См. примеры ниже.
Дополнительный описатель выравнивания , который говорит, что результат должен быть выравнен по левому или по правому краю. По умолчанию выравнивание происходит по правому краю; символ - приведет к вырвниванию по левому краю.
Дополнительный описатель ширины , который говорит, с каким количеством символов (минимум) пожет производится данная замена.
Дополнительный описатель точности , который говорит, сколько десятичных знаков следует отображать для чисел с плавающей точкой. Этот описатель не действует на остальные типы, кроме double. (другая полезная функция для форматирования чисел это number_format() .)
Примеры
Пример 2. sprintf: форматирование денежной еденицы $money1 = 68.75; $money2 = 54.35; $money = $money1 + $money2; // echo $money will output "123.1"; $formatted = sprintf ("%01.2f", $money); // echo $formatted will output "123.10" ПримерыВсе то, что записано >>> между таких скобок <<< является результатом работы фукнции (т.е. пример вывода на экран) $s="MyString"; -> строка %s $f=12345.6789; -> дробное %f $d=12345; -> целое %d 10-я система: 0123456789 16числа %x 16-я система: 0123456789abcdef 16числа %X 16-я система: 0123456789ABCDEF 8числа %o 8-я система: 01234567 2числа %b 2-я система: 01 просто выводим число: printf("%d",$d); >>> 12345 <<< просто выводим 16число: printf("%X",123456789); >>> 75BCD15 <<< просто выводим 2число: printf("%b",$d); >>> 11000000111001 <<< просто выводим дробное число: printf("%f",$f); >>> 12345.6789 <<< дополнение чисел нулями: printf("%010d",$d); >>> 0000012345 <<< округление до 3х знаков после запятой: printf("%.3f",$f); >>> 12345.679 <<< просто выводим число + посторонний текст: printf("посторонний%dтекст",$d); >>> посторонний12345текст <<< вывод нескольких переменных - последовательное перечисление printf("%d-%f-%s",$d,$f,$s); >>> 12345-12345.678900-MyString <<< выравнивание (ширина 20 символов) по правому краю, пустоту заполняем "_": printf("%"_20s",MyString); >>> ____________MyString <<< выравнивание по левому краю, пустоту заполняем "x": printf("%-"x20s",MyString); >>> MyStringxxxxxxxxxxxx <<<Другие примеры смотрим тут: |
Выводит строку, значение переменной или выражение.
Синтаксис:
Print(string arg)
Функция print() выводит аргумент arg, в качестве которого может быть переменная или выражение.
vsprintf()
Возвращает отформатированную строку (PHP 4 >= 4.1.0, PHP 5)
Описание:
String vsprintf (string format, array args)
Эта функция подобна sprintf(), но она принимает не переменное число аргументов, а массив.
Производит вывод одного или нескольких значений.
Синтаксис:
Echo(string arg1, string ...)
Функция echo() выводит значения перечисленных параметров.
echo() - фактически языковая конструкция, поэтому для нее не обязательны скобки, даже если используется несколько аргументов.
echo "Перенос на следующую строку,имеющийся в коде, сохраняетсяи используется при выводе".
"чтобы избежать этого используйте".
"оператор конкатенации";
Вывод отформатированной строки.
Синтаксис:
Int printf(string format [, mixed args, ...]);
Делает то же самое, что и sprintf(), только результирующая строка не возвращается, а направляется в браузер пользователя.
Производит форматирование строки с подстановкой переменных.
Синтаксис:
Sprintf($format [,args, ...])
Эта функция возвращает строку, составленную на основе строки форматирования, содержащей некоторые специальные символы, которые будут впоследствии заменены на значения соответствующих переменных из списка аргументов.
Строка форматирования $format может включать в себя команды форматирования, предваренные символом %.
Все остальные символы копируются в выходную строку как есть. Каждый спецификатор формата (то есть, символ % и следующие за ним команды) соответствуют одному, и только одному параметру, указанному после параметра $format. Если же нужно поместить в текст % как обычный символ, необходимо его удвоить:
Echo sprintf("The percentage was %d%%",$percentage);
Каждый спецификатор формата включает максимум пять элементов (в порядке их следования после символа %):
Необязательный спецификатор размера поля, который указывает, сколько символов будет отведено под выводимую величину.
В качестве символов-заполнителей (если значение имеет меньший размер, чем размер поля для его вывода)
может использоваться пробел или 0, по умолчанию подставляется пробел. Можно задать любой другой символ-наполнитель, если указать его в строке форматирования, предварив апострофом.
Опциональный спецификатор выравнивания, определяющий, будет результат выровнен по правому или по левому краю поля. По умолчанию производится выравнивание по правому краю, однако можно указать и левое выравнивание, задав символ - (минус).
Необязательное число, определяющее размер поля для вывода величины. Если результат не будет в поле, то он "вылезет" за края этого поля, но не будет усечен.
Необязательное число, которое предварено точкой ".", предписывающее, сколько знаков после запятой будет в результирующей строке.
Этот спецификатор учитывается только в том случае, если происходит вывод числа с плавающей точкой, в противном случае он игнорируется.
Наконец, обязательный (заметьте - единственный обязательный!) спецификатор типа величины, которая будет помещена в выходную строку:
b - очередной аргумент из списка выводится как двоичное целое число
c - выводится символ с указанным в аргументе кодом
d - целое число
f - число с плавающей точкой
o - восьмеричное целое число
s - строка символов
x - шестнадцатиричное целое число с маленькими буквами a-z
X - шестнадцатиричное целое число с большими буквами A-Z
Вот как можно указать точность представления чисел с плавающей точкой:
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money выведет "123.1"...
$formatted = sprintf ("%01.2f", $money);
// echo $formatted выведет "123.10"!
Вот пример вывода целого числа, предваренного нужным количеством нулей:
$isodate=sprintf("%04d-%02d-%02d",$year,$month,$day);
Производит интерпретацию строки согласно формату и занесение значений в переменные.
Синтаксис:
Mixed sscanf(string str, string format [, string var1 ...])
Функция sscanf() является противоположностью функции printf().
Она интерпретирует строку str согласно формату format, аналогично спецификации printf().
При указании только двух аргументов полученные значения возвращаются в массиве.
// получение серийного номера$serial = sscanf("SN/235-0001", "SN/%3d-%4d");
echo $serial*10000+$serial; // выводит: 2350001
// и даты изготовления$date = "January 01 2000";
list($month, $day, $year) = sscanf($date, "%s %d %d");
echo "Дата: $year-".substr($month,0,3)."-$dayn";
// выводит: 2000-Jan-01
При указании дополнительных необязательных параметров (их следует передавать по ссылке)
функция возвращает их число. Те переменные, которые не получают значений, в возвращаемом значении не учитываются.
// генерируем XML запись из строки$auth = "765tLewis Carroll";
$n = sscan($auth,"%dt%s %s", &$id, &$first, &$last);
echo "
fprintf()
Описание:
Int fprintf (resource handle, string format [, mixed args])
Записывает строку, созданную с использованием строки формата format, в поток, дескриптор которого передается в handle. Аргумент format подробно рассмотрен в описании функции sprintf().
fprintf(): заполнение нулями
return;
fprintf($fp, "%04d-%02d-%02d", $year, $month, $day);
// запишет форматированную дату в файл date.txt
?>
fprintf(): форматирование денежных величин
if (!($fp = fopen("currency.txt", "w")))
return;
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money выведет "123.1";
$len = fprintf($fp, "%01.2f", $money);
// строка "123.10" записана в файл currency.txt
echo "записано $len байт в файл currency.txt";
?>
vfprintf()
Записывает отформатированную строку в поток (PHP 5)
Описание:
Int vfprintf (resource handle, string format, array args)
Записывает строку, отформатированную в соответствии с format, в ресурс потока, указанный дескриптором handle. Форматирование осуществляется аналогично sprintf().
Работает так же, как и fprintf(), но принимает массив аргументов, а не переменное число аргументов.
Возвращает длину выведенной строки.
See also: printf(), sprintf(), sscanf(), fscanf(), vsprintf(), and number_format().
Examples
vfprintf(): zero-padded integers
if (!($fp = fopen("date.txt", "w")))
return;
vfprintf($fp, "%04d-%02d-%02d", array($year, $month, $day));
// will write the formatted ISO date to date.txt
?>
vprintf()
Выводит отформатированную строку (PHP 4 >= 4.1.0, PHP 5)
Описание:
Int vprintf (string format, array args)
Выводит значения массива args, отформатированные в соответствии с аргументом format, описанном в документации функции sprintf().
Эта функция подобна printf(), но она принимает не переменное число аргументов, а массив.
Возвращает длину выведенной строки
number_format()
Форматирует число с разделением групп (PHP 3, PHP 4, PHP 5)
Описание:
String number_format (float number [, int decimals])
string number_format (float number, int decimals, string dec_point, string thousands_sep)
number_format() возвращает отформатированное число number. Функция принимает один, два или четыре аргумента (не три):
Если передан только один аргумент, number будет отформатирован без дробной части, но с запятой (",") между группами цифр по 3.
Если переданы два аргумента, number будет отформатирован с decimals знаками после точки (".") и с запятой (",") между группами цифр по 3.
Если переданы все четыре аргумента, number будет отформатирован с decimals знаками после точки и с разделитилем между группами цифр по 3, при этом в качестве десятичной точки будет использован dec_point, а в качестве разделителя групп - thousands_sep.
Используется только первый символ строки thousands_sep. Например, при передаче foo в качестве thousands_sep для форматирования числа 1000, number_format() возвращает 1f000.
Пример использования number_format()
Во Франции обычно используются 2 знака после запятой (","), и пробел (" ") в качестве разделителя групп. Такое форматирование получается при использовании следующего кода:
$number = 1234.56;
// английский формат (по умолчанию)
$english_format_number = number_format($number);
// 1,234
// французский формат
$nombre_format_francais = number_format($number, 2, ",", " ");
// 1 234,56
$number = 1234.5678;
// английский формат без разделителей групп
$english_format_number = number_format($number, 2, ".", "");
// 1234.57