4.3BSD-UWisc/man/cat3/printf.3s
PRINTF(3S) UNIX Programmer's Manual PRINTF(3S)
NAME
printf, fprintf, sprintf - formatted output conversion
SYNOPSIS
#include <stdio.h>
printf(format [, arg ] ... )
char *format;
fprintf(stream, format [, arg ] ... )
FILE *stream;
char *format;
sprintf(s, format [, arg ] ... )
char *s, format;
#include <varargs.h>
_doprnt(format, args, stream)
char *format;
va_list *args;
FILE *stream;
DESCRIPTION
_P_r_i_n_t_f places output on the standard output stream stdout.
_F_p_r_i_n_t_f places output on the named output _s_t_r_e_a_m. _S_p_r_i_n_t_f
places `output' in the string _s, followed by the character
`\0'. All of these routines work by calling the internal
routine _doprnt, using the variable-length argument facili-
ties of _v_a_r_a_r_g_s(3).
Each of these functions converts, formats, and prints its
arguments after the first under control of the first argu-
ment. The first argument is a character string which con-
tains two types of objects: plain characters, which are sim-
ply copied to the output stream, and conversion specifica-
tions, each of which causes conversion and printing of the
next successive _a_r_g _p_r_i_n_t_f.
Each conversion specification is introduced by the character
%. The remainder of the conversion specification includes
in the following order
o+ Zero or more of following flags:
o+ a `#' character specifying that the value should
be converted to an ``alternate form''. For c, d,
s, and u, conversions, this option has no effect.
For o conversions, the precision of the number is
increased to force the first character of the out-
put string to a zero. For x(X) conversion, a
non-zero result has the string 0x(0X) prepended to
it. For e, E, f, g, and G, conversions, the
Printed 12/27/86 June 5, 1986 1
PRINTF(3S) UNIX Programmer's Manual PRINTF(3S)
result will always contain a decimal point, even
if no digits follow the point (normally, a decimal
point only appears in the results of those conver-
sions if a digit follows the decimal point). For
g and G conversions, trailing zeros are not
removed from the result as they would otherwise
be.
o+ a minus sign `-' which specifies _l_e_f_t _a_d_j_u_s_t_m_e_n_t
of the converted value in the indicated field;
o+ a `+' character specifying that there should
always be a sign placed before the number when
using signed conversions.
o+ a space specifying that a blank should be left
before a positive number during a signed conver-
sion. A `+' overrides a space if both are used.
o+ an optional digit string specifying a _f_i_e_l_d _w_i_d_t_h; if
the converted value has fewer characters than the field
width it will be blank-padded on the left (or right, if
the left-adjustment indicator has been given) to make
up the field width; if the field width begins with a
zero, zero-padding will be done instead of blank-
padding;
o+ an optional period `.' which serves to separate the
field width from the next digit string;
o+ an optional digit string specifying a _p_r_e_c_i_s_i_o_n which
specifies the number of digits to appear after the
decimal point, for e- and f-conversion, or the maximum
number of characters to be printed from a string;
o+ the character l specifying that a following d, o, x, or
u corresponds to a long integer _a_r_g.
o+ a character which indicates the type of conversion to
be applied.
A field width or precision may be `*' instead of a digit
string. In this case an integer _a_r_g supplies the field
width or precision.
The conversion characters and their meanings are
dox The integer _a_r_g is converted to decimal, octal, or hex-
adecimal notation respectively.
f The float or double _a_r_g is converted to decimal nota-
tion in the style `[-]ddd.ddd' where the number of d's
Printed 12/27/86 June 5, 1986 2
PRINTF(3S) UNIX Programmer's Manual PRINTF(3S)
after the decimal point is equal to the precision
specification for the argument. If the precision is
missing, 6 digits are given; if the precision is expli-
citly 0, no digits and no decimal point are printed.
e The float or double _a_r_g is converted in the style
`[-]d.ddde+_dd' where there is one digit before the
decimal point and the number after is equal to the pre-
cision specification for the argument; when the preci-
sion is missing, 6 digits are produced.
g The float or double _a_r_g is printed in style d, in style
f, or in style e, whichever gives full precision in
minimum space.
c The character _a_r_g is printed.
s _A_r_g is taken to be a string (character pointer) and
characters from the string are printed until a null
character or until the number of characters indicated
by the precision specification is reached; however if
the precision is 0 or missing all characters up to a
null are printed.
u The unsigned integer _a_r_g is converted to decimal and
printed (the result will be in the range 0 through MAX-
UINT, where MAXUINT equals 4294967295 on a VAX-11 and
65535 on a PDP-11).
% Print a `%'; no argument is converted.
In no case does a non-existent or small field width cause
truncation of a field; padding takes place only if the
specified field width exceeds the actual width. Characters
generated by _p_r_i_n_t_f are printed by _p_u_t_c(3S).
Examples
To print a date and time in the form `Sunday, July 3,
10:02', where _w_e_e_k_d_a_y and _m_o_n_t_h are pointers to null-
terminated strings:
printf("%s, %s %d, %02d:%02d", weekday, month, day,
hour, min);
To print pi to 5 decimals:
printf("pi = %.5f", 4*atan(1.0));
SEE ALSO
putc(3S), scanf(3S), ecvt(3)
Printed 12/27/86 June 5, 1986 3
PRINTF(3S) UNIX Programmer's Manual PRINTF(3S)
BUGS
Very wide fields (>128 characters) fail.
Printed 12/27/86 June 5, 1986 4