Somewhere in my vast array of teaching material, I claimed that only for loops can be nested. That’s poppycock.
You can nest any type of loop in the C language, or in any programming language. A while loop nests just as snugly as a for loop. In fact, you can convert any for loop into a while loop, no problem. Some programmers find while loops more readable, which is a sentiment I share.
In the following code, nested while loops generate a grid of numbers and letters:
#include <stdio.h>
int main()
{
short a;
char b;
a = 1;
while(a <= 5)
{
b = 'A';
while(b <= 'E')
{
printf("%d%c\t",a,b);
b++;
}
putchar('\n');
a++;
}
return(0);
}
The while loop at Line 9 spins 5 times. The while loop at Line 12 also spins 5 times, but uses char variable b and characters 'A' through 'F' instead of values. (Well, internally these characters are values.)
Here’s the output:
1A 1B 1C 1D 1E
2A 2B 2C 2D 2E
3A 3B 3C 3D 3E
4A 4B 4C 4D 4E
5A 5B 5C 5D 5E
A for loop can accomplish the same thing, but in fewer lines. That’s because the various pieces of the loop are contained in a single statement as opposed to separate lines in the code.
For example, a for loop for variable a would combine Lines 8, 9, and 18 into a single statement:
for(a=1; a<=5; a++)
Ditto for variable b:
for(b='A'; b<='E'; b++)
Here is the for version of the same code:
#include <stdio.h>
int main()
{
short a;
char b;
for(a=1; a<=5; a++)
{
for(b='A'; b<='E'; b++)
printf("%d%c\t",a,b);
putchar('\n');
}
return(0);
}
And the output is the same, though the code is 6 lines shorter.
Which is best? Neither, though again I believe that the while loop example is more readable. Still, my point is that you can nest both for and while loops. You can even mix them. If I wrote or said that you can’t nest a while loop I was just being silly.