When I began studying Unix, I used to be launched to the echo
command fairly early within the course of. Likewise, my preliminary Python lesson concerned the print
perform. Picking up C++ and Java launched me to cout
and systemout
. It appeared each language proudly had a handy one-line methodology of manufacturing output and marketed it prefer it was going out of fashion.
But as soon as I turned the primary web page of intermediate classes, I met printf
, a cryptic, mysterious, and surprisingly versatile perform. In going towards the puzzling custom of hiding printf
from newbies, this text goals to introduce to the world the standard printf
perform and clarify how it may be utilized in almost any language.
A short historical past of printf
The time period printf
stands for “print formatted” and should have first appeared within the Algol 68 programming language. Since its inclusion in C, printf
has been reimplemented in C++, Java, Bash, PHP, and fairly in all probability in no matter your favourite (post-C) language occurs to be.
It’s clearly well-liked, and but many individuals appear to treat its syntax to be complicated, particularly in comparison with options comparable to echo
or print
or cout
. For instance, here is a easy echo assertion in Bash:
Here’s the identical consequence utilizing printf
in Bash:
$ printf "%sn" hiya
hiya
$
But you get quite a lot of options for that added complexity, and that is precisely why printf
is effectively value studying.
printf output
The important idea behind printf
is its capacity to format its output primarily based on model data separate from the content material. For occasion, there’s a assortment of particular sequences that printf
acknowledges as particular characters. Your favourite language could have better or fewer sequences, however widespread ones embody:
n
: New liner
: Carriage returnt
: Horizontal tabNNN
: A particular byte with an octal worth containing one to a few digits
For instance:
$ printf "t123105124110n"
SETH
$
In this Bash instance, printf
renders a tab character adopted by the ASCII characters assigned to a string of 4 octal values. This is terminated with the management sequence to provide a brand new line (n
).
Attempting the identical factor with echo
produces one thing slightly extra literal:
$ printf "t123105124110n"
t123105124110n
$
Using Python’s print
perform for a similar activity reveals there’s extra to Python’s print
command than you would possibly anticipate:
>>> print("t123n")
S>>>
Obviously, Python’s print
incorporates conventional printf
options in addition to the options of a easy echo
or cout
.
These examples comprise nothing greater than literal characters, although, and whereas they’re helpful in some conditions, they’re in all probability the least important factor about printf
. The true energy of printf
lies in format specification.
Format output with printf
Format specifiers are characters preceded by a % signal (%
).
Common ones embody:
%s
: String%d
: Digit%f
: Floating-point quantity%o
: A quantity in octal
These are placeholders in a printf
assertion, which you’ll be able to change with a worth you present some other place in your printf
assertion. Where these values are supplied depends upon the language you are utilizing and its syntax, however here is a easy instance in Java:
string var="hiyan";
system.out.printf("%s", var);
This, wrapped in applicable boilerplate code and executed, renders:
It will get much more attention-grabbing, although, when the content material of a variable adjustments. Suppose you need to replace your output primarily based on an ever-increasing quantity:
#embody <stdio.h>int important()
Compiled and run:
Processing is 1% completed.
[...]
Processing is 100% completed.
Notice that the double %
within the code resolves to a single printed %
image.
Limiting decimal locations with printf
Numbers can get complicated, and printf
gives many formatting choices. You can restrict what number of decimal locations are printed utilizing the %f
for floating-point numbers. By inserting a dot (.
) together with a limiter quantity between the % signal and the f
, you inform printf
what number of decimals to render. Here’s a easy instance written in Bash for brevity:
$ printf "%.2fn" three.141519
three.14
$
Similar syntax applies to different languages. Here’s an instance in C:
#embody <math.h>
#embody <stdio.h>int important()
For three decimal locations, use .3f
, and so forth.
Adding commas to a quantity with printf
Since large numbers could be troublesome to parse, it is common to interrupt them up with a comma. You can have printf
add commas as wanted by inserting an apostrophe ('
) between the % signal and the d
:
$ printf "%'dn" 1024
1,024
$ printf "%'dn" 1024601
1,024,601
$
Add main zeros with printf
Another widespread use for printf
is to impose a selected format upon numbers in file names. For occasion, when you have 10 sequential information on a pc, the pc could kind 10.jpg
earlier than 1.jpg
, which might be not your intent. When writing to a file programmatically, you need to use printf
to kind the file title with main zero characters. Here’s an instance in Bash for brevity:
$ printf "000%d.jpgn" 1..10
0001.jpg
0002.jpg
[...]
00010.jpg
Using printf
As you’ll be able to inform from these printf
examples, together with management characters, particularly n
, could be tedious, and the syntax is comparatively complicated. This is the rationale shortcuts like echo
and cout
have been developed. However, when you use printf
each every now and then, you may get used to the syntax, and it’ll develop into second nature. I do not see any motive printf
must be your first alternative for printing statements throughout on a regular basis actions, nevertheless it’s an important device to be snug sufficient with that it will not gradual you down while you want it.
Take a while to study printf
in your language of alternative, and use it while you want it. It’s a strong device you will not remorse having at your fingertips.