A loop within another loop is called a nested loop. Let's take an example,
Suppose we want to loop through each day of a week for 3 weeks.
To achieve this, we can create a nested loop to iterate three times (3 weeks). And inside the loop, we can create another loop to iterate 7 times (7 days). For example,
Example: Nested for Loop
// C++ program to display 7 days of 3 weeks
#include <iostream>
using namespace std;
int main() {
int weeks = 3, days_in_week = 7;
for (int i = 1; i <= weeks; ++i) {
cout << "Week: " << i << endl;
for (int j = 1; j <= days_in_week; ++j) {
cout << " Day:" << j << endl;
}
}
return 0;
}
Output
Week: 1 Day:1 Day:2 Day:3 ... .. ... Week: 2 Day:1 Day:2 Day:3 ... ... ..
We can create nested loops with while and do...while in a similar way.
Example: Displaying a Pattern
// C++ program to display a pattern
// with 5 rows and 3 columns
#include <iostream>
using namespace std;
int main() {
int rows = 5;
int columns = 3;
for (int i = 1; i <= rows; ++i) {
for (int j = 1; j <= columns; ++j) {
cout << "* ";
}
cout << endl;
}
return 0;
}
Output
* * * * * * * * * * * * * * *
In this program, the outer loop iterates from i == 1
to i == rows
.
The inner loop iterates from j == 1
to j == columns
. Inside the inner loop, we print the character '*'
.
break and continue Inside Nested Loops
When we use a break statement inside the inner loop, it terminates the inner loop but not the outer loop. For example,
int weeks = 3, days_in_week = 7;
for (int i = 1; i <= weeks; ++i) {
cout << "Week: " << i << endl;
for (int j = 1; j <= days_in_week; ++j) {
// break during the 2nd week
if (i == 2) {
break;
}
cout << " Day:" << j << endl;
}
}
Output
Week: 1 Day:1 Day:2 ... .. ... Week: 2 Week: 3 Day:1 Day:2 ... .. ...
This program does not run the inner loop when the value of i is 2
i.e. it does not print the days of the 2nd week. The outer loop that prints the weeks is unaffected.
Similarly, when we use a continue statement inside the inner loop, it skips the current iteration of the inner loop only. The outer loop is unaffected. For example,
int weeks = 3, days_in_week = 7;
for (int i = 1; i <= weeks; ++i) {
cout << "Week: " << i << endl;
for (int j = 1; j <= days_in_week; ++j) {
// continue if the day is an odd number
if (j%2 != 0) {
continue;
}
cout << " Day:" << j << endl;
}
}
Output
Week: 1 Day:2 Day:4 Day:6 Week: 2 Day:2 Day:4 Day:6 Week: 3 Day:2 Day:4 Day:6
This program prints only those days that are even.
Whenever the days_in_week is odd, the continue
statement skips that iteration of the inner loop.