12. Nested Loops
Alignment
The printout of the multiplication table was quite unsightly at first, assuming the true shape of a table only after alignment was applied. Whenever a program has to print out some numbers in form of a table, alignment will make the output have a more orderly appearance. The same applies when outputting some numbers in a column below each other.
When writing out a number, like in
cout << 2134;
it will be written out with as many characters as necessary. In this case, four characters will be used: 2,1,3,4.
2134
Manipulator setw
sets
the minimal number of characters to be used for writing out a succeeding output
expression, for example:
cout << setw(6) << 2134;
In this statement the setw
manipulator
sets the number of characters to a minimum of 6. This will be applied to the
succeeding output expression, which has only 4 characters to write out. To make
up for the required minimal number of characters, two space characters will be
added in the front for padding. The output will look like the one below, with the
two space characters in front of the number:
2134
We also say that two space characters have been prepended to the output, as opposed to being appended.
A note: whenever you are using the setw
manipulator,
you have to add this line to the beginning of the program:
#include <iomanip>
because, just as arrays need the vector
library, so does setw
need the iomanip
library and so the names cin
and cout
need
the iostream
library.
Let us examine another example:
cout << setw(5) << 1.11;
It results in one space character for padding:
1.11
You might be wondering why there is only
one space character when number 1.11 has three digits. The number 1.11
actually
has four characters because a decimal point is a character, too. The setw
manipulator can also be applied to a string. If you would like, you can test
that by yourself.
Note: if an expression following the setw
manipulator
has to use more characters than the specified minimum, it will be written out
in the usual way.
If using a for
loop to output some numbers in
separate rows with the intention of making the numbers form a column, then the setw
manipulator will align the column to the right:
for (int i=1; i<=5; i++) cout << setw(3) << i*i << endl;
The output is:
1 4 9 16 25
Here is a more drastic example which
uses the setw
manipulator twice:
for (int i=0; i<11; i++) cout << setw(2) << i << " to the fourth power: " << setw(5) << i*i*i*i << endl;
It outputs:
5 to the fourth power: 625 6 to the fourth power: 1296 7 to the fourth power: 2401 8 to the fourth power: 4096 9 to the fourth power: 6561 10 to the fourth power: 10000 11 to the fourth power: 14641