Loops may be nested, with one loop sitting in the body of another. The inner
loop will be executed in full for every execution of the outer loop. This c++
program illustrates writing marks into a matrix using nested for loops.
2: //Illustrates nested for loops
4: #include <iostream.h>
6: int main()
8: int rows, columns;
9: char theChar;
10: cout << "How many rows? ";
11: cin >> rows;
12: cout << "How many columns? ";
13: cin >> columns;
14: cout << "What character? ";
15: cin >> theChar;
16: for (int i = 0; i<rows; i++)
18: for (int j = 0; j<columns; j++)
19: cout << theChar;
20: cout << "\n";
22: return 0;
Output: How many rows? 4
How many columns? 12
What character? x
Analysis: The user is prompted for the
number of rows and columns and for a character to print. The
first for loop, on line 16, initializes a counter (i) to 0,
and then the body of the outer for loop is run.
On line 18, the first line of the body of the outer for loop, another for
loop is established. A second counter (j) is also initialized to 0,
and the body of the inner for loop is executed. On line 19, the chosen
character is printed, and control returns to the header of the inner for
loop. Note that the inner for loop is only one statement (the printing
of the character). The condition is tested (j < columns) and if it
evaluates true, j is incremented and the next character is
printed. This continues until j equals the number of columns.
Once the inner for loop fails its test, in this case after 12 Xs
are printed, execution falls through to line 20, and a new line is printed. The
outer for loop now returns to its header, where its condition (i
< rows) is tested. If this evaluates true, i is
incremented and the body of the loop is executed.
In the second iteration of the outer for loop, the inner for
loop is started over. Thus, j is reinitialized to 0 and the
entire inner loop is run again.
The important idea here is that by using a nested loop, the inner loop is
executed for each iteration of the outer loop. Thus the character is printed columns
times for each row.
NOTE: As an aside, many C++
programmers use the letters i and j as counting variables.
This tradition goes all the way back to FORTRAN, in which the letters i,
j, k, l, m, and n were the only
legal counting variables. Other programmers prefer to use more descriptive
counter variable names, such as Ctrl and Ctr2. Using i
and j in for loop headers should not cause much confusion,
Scoping in for
You will remember that variables are scoped to the block in which they are
created. That is, a local variable is visible only within the block in which it
is created. It is important to note that counting variables created in the
header of a for loop are scoped to the outer block, not the inner
block. The implication of this is that if you have two for loops in the
same function, you must give them different counter variables, or they may
interfere with one another.