Notes on the printf specifiers in C

code type format
d int decimal (base ten) number
o int octal number (no leading ‘0’ supplied in printf)
x or X int hexadecimal number (no leading ‘0x’ supplied in printf; accepted if present in scanf) (for printf, ‘X’ makes it use upper case for the digits ABCDEF)
ld long decimal number (‘l’ can also be applied to any of the above to change the type from ‘int’ to ‘long’)
u unsigned decimal number
lu unsigned long decimal number
c char [footnote] single character
s char pointer string
f float [footnote] number with six digits of precision
g float [footnote] number with up to six digits of precision
e float [footnote] number with up to six digits of precision, scientific notation
lf double [footnote] number with six digits of precision
lg double [footnote] number with up to six digits of precision
le double [footnote] number with up to six digits of precision, scientific notation

Footnote: In printf(), the rvalue type promotions are expected. Thus %c
actually corresponds to a parameter of type int and %f and %g actually
correspond to parameters of type double. Thus in printf() there is no
difference between %f and %lf, or between %g and %lg.
However, in scanf() what is passed is a pointer to the variable so no
rvalue type promotions occur or are expected.
Thus %f and %lf are quite different in scanf, but the same in printf.

From http://www.cdf.toronto.edu/~ajr/209/notes/printf.html

Leave a Reply

Your email address will not be published. Required fields are marked *