## 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
```