Goal: To be able to implement While and For loops into code

A loop is a mean of control flow where certain commands are repeated multiple times. They are used whenever similar actions are performed numerous times. The number of times and when to stop repeating can be controlled and can differ based on the values of variables.

While Loops

The while loop is the most basic type of loop structure in C++. They are formatted as follows:

<span id="L1" class="line"><span class="k">while</span> <span class="p">(</span><span class="n">condition</span><span class="p">)</span> <span class="p">{</span></span>
<span id="L2" class="line">    <span class="c1">// commands to loop if condition is true</span></span>
<span id="L3" class="line"><span class="p">}</span></span>

flowchart of a while loop

Once the program enters a while loop, it will check the condition stated in parenthesis. If the condition results to true, then everything in the braces will be executed. Once everything in the braces is executed, the program will move back to the beginning of the loop structure and check whether the condition still results to true or not. If the condition still results true, then the whole looping process repeats. If the condition results false, then the program will move down to any commands after the while loop.

As long as the condition in parenthesis remains true, the program will endlessly loop inside of the while loop.

Sample Code:
<span id="L1" class="line"><span class="cp">#include &lt;iostream&gt;</span></span>
<span id="L2" class="line"><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span></span>
<span id="L3" class="line"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span></span>
<span id="L4" class="line">    <span class="kt">int</span> <span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></span>
<span id="L5" class="line">    <span class="c1">// if condition returns false, go to line 10</span></span>
<span id="L6" class="line">    <span class="k">while</span> <span class="p">(</span><span class="n">counter</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">)</span> <span class="p">{</span>   <span class="c1">// checks if the counter is below 3</span></span>
<span id="L7" class="line">        <span class="n">counter</span><span class="o">++</span><span class="p">;</span>          <span class="c1">// adds one to the counter</span></span>
<span id="L8" class="line">        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">counter</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span></span>
<span id="L9" class="line">    <span class="p">}</span>                       <span class="c1">// after looping, it goes back to line 6</span></span>
<span id="L10" class="line">    <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"End"</span><span class="p">;</span></span>
<span id="L11" class="line">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span></span>
<span id="L12" class="line"><span class="p">}</span></span>

In the previous example, a counter variable was initialized and the program will continue to loop and increase the counter by 1 when the counter is less than 3. Once the condition results false, it moves out of the while loop to the remaining code on Line 10.

Apart from having the condition at the beginning of a while loop, a command known as break tells the program to immediately exit the current loop it is in. Break can be combined with an if statement so that the program can leave the loop if the condition in the if statement is met.

The following code will have the same outputs as the code above:

<span id="L1" class="line"><span class="cp">#include &lt;iostream&gt;</span></span>
<span id="L2" class="line"><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span></span>
<span id="L3" class="line"></span>
<span id="L4" class="line"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span></span>
<span id="L5" class="line">    <span class="kt">int</span> <span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>         <span class="c1">// initializes counter variable</span></span>
<span id="L6" class="line">    <span class="k">while</span> <span class="p">(</span><span class="nb">true</span><span class="p">)</span> <span class="p">{</span>           <span class="c1">// condition will always return true</span></span>
<span id="L7" class="line">        <span class="k">if</span> <span class="p">(</span><span class="n">counter</span> <span class="o">&gt;=</span> <span class="mi">3</span><span class="p">)</span> <span class="p">{</span>  <span class="c1">// exit condition</span></span>
<span id="L8" class="line">            <span class="k">break</span><span class="p">;</span>           <span class="c1">// goes immediately to line 13</span></span>
<span id="L9" class="line">        <span class="p">}</span></span>
<span id="L10" class="line">        <span class="n">counter</span><span class="o">++</span><span class="p">;</span>           <span class="c1">// adds one to the counter</span></span>
<span id="L11" class="line">        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">counter</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span></span>
<span id="L12" class="line">    <span class="p">}</span>                        <span class="c1">// goes back to line 6</span></span>
<span id="L13" class="line">    <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"End"</span><span class="p">;</span></span>
<span id="L14" class="line">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span></span>
<span id="L15" class="line"><span class="p">}</span></span>

For Loops

In the examples above, a counter variable was manually made in order to use the while loop. Typically, while loops are not used when the program loops a known number of times. For loops are also known as counted loops because it is made to have a counter variable. The format of the for loop resembles the following.

<span id="L1" class="line"><span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">counterVariable</span><span class="p">;</span> <span class="n">condition</span><span class="p">;</span> <span class="n">changetoCounter</span><span class="p">)</span> <span class="p">{</span></span>
<span id="L2" class="line">    <span class="c1">// commands while condition above is true</span></span>
<span id="L3" class="line"><span class="p">}</span></span>

The section in parentheses are divided into three groups

  • The first part initializes the counter variable to be used for the entire loop structure

    • Variable names for counters are often i or j

  • The second part is the condition that usually includes the counter variable.

    • If the condition results true, the program goes through the for loop

    • If the condition results false, the program will exit the for loop

  • The third part is the changes the counter variable goes through each time the program loops

Note
Notice how each section is divided by semicolons.
Example Code:
<span id="L1" class="line"><span class="cp">#include &lt;iostream&gt;</span></span>
<span id="L2" class="line"><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span></span>
<span id="L3" class="line"></span>
<span id="L4" class="line"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span></span>
<span id="L5" class="line">    <span class="c1">// set counter, i, to 3</span></span>
<span id="L6" class="line">    <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o">--</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// if i &lt;= 0, go to line 9</span></span>
<span id="L7" class="line">        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">i</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span></span>
<span id="L8" class="line">    <span class="p">}</span>   <span class="c1">// goes back to line 6 and subtracts 1 to i</span></span>
<span id="L9" class="line">    <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"End"</span><span class="p">;</span></span>
<span id="L10" class="line"><span class="p">}</span></span>
Output:
3
2
1
End

On line 6, a counter was created and set to 3 to start off. The program continued to loop, and the counter kept decrementing by one until the counter was 0, and the condition results false.

Brief Introduction to Scope

In C++, scope refers to a specific region in code that are surrounded by braces. For example, the main function is its own scope and it can nest smaller scopes if it had loop or if structures in it. Braces act as barriers for variables. Chapter 8 warned how a variable cannot be initialized in an if structure and used outside of the if structure. This is because any initialized variable cannot be used outside of the scope it was initialized in.

When a variable is initialized in a smaller scope (Ex: a loop), a place in memory is made and no other variable can be created with the same name as that variable. That variable is able to be accessed within smaller scopes and can be used any time so long as the program is still at the scope the variable was initialized in. When the program leaves that scope (Ex: when it leaves a loop), all variables initialized inside that scope are destroyed and space in the memory is freed. This means that a variable initialized in the smaller scope no longer exists. This also means that another variable with the exact same name can be made.

This is why properly indenting code is important. Indentations show where exactly variables are able to be used and when they will be destroyed. It also shows how each scope nests within larger scopes. The number of indents a command has represents the number of nested scopes there are.

On the example code on the next page, there are two different instances where variable i is initialized. However, since they were not declared in the same scope, the two variables did not co-exist. Instead, the second i variable was initialized when the first i variable was already destroyed.

Demonstration of Scopes:
<span id="L1" class="line"><span class="cp">#include &lt;iostream&gt;</span></span>
<span id="L2" class="line"><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span></span>
<span id="L3" class="line"><span class="c1">// pay attention to all the indents</span></span>
<span id="L4" class="line"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span></span>
<span id="L5" class="line">    <span class="c1">// variable declared in the scope of the main fcn</span></span>
<span id="L6" class="line">    <span class="kt">int</span> <span class="n">var</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></span>
<span id="L7" class="line">    <span class="c1">// counter declared in the scope of the for loop</span></span>
<span id="L8" class="line">    <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span></span>
<span id="L9" class="line">        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">i</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span></span>
<span id="L10" class="line">        <span class="n">var</span><span class="o">++</span><span class="p">;</span></span>
<span id="L11" class="line">    <span class="p">}</span></span>
<span id="L12" class="line">    <span class="c1">// i no longer exists, but var still exists</span></span>
<span id="L13" class="line">    <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span></span>
<span id="L14" class="line">        <span class="c1">// i now exists again, since it was reinitialized</span></span>
<span id="L15" class="line">        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">i</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span></span>
<span id="L16" class="line">        <span class="n">var</span><span class="o">++</span><span class="p">;</span></span>
<span id="L17" class="line">    <span class="p">}</span></span>
<span id="L18" class="line">    <span class="c1">// i no longer exists... again</span></span>
<span id="L19" class="line">    <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">var</span><span class="p">;</span>   <span class="c1">// outputs total number of loops</span></span>
<span id="L20" class="line">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span></span>
<span id="L21" class="line"><span class="p">}</span></span>
<span id="L22" class="line"><span class="c1">// var does not exist anymore</span></span>
Output:
0
1
2
0
1
2
6

In Summary

  • While loops and for loops are used to have the program repeat the same commands multiple times

  • The program will leave the while loop once the condition in the while loop results false

  • For loops include a counter variable as well as an if condition

  • A for loop is for counted loops and a while loop is for non-counted loops

  • Break can be used on both loops to end the looping procedure

  • Variables cannot be used outside of the scope the variable has been initialized in

Contest Questions


Further Reading on Loops Structures

Do-While Loops

Do-while loops are modified while loops. They makes sure that the program runs everything in the loop structure at least once. The condition for looping is checked at the very end of the loop structure and not at the beginning. The syntax of the do-while loop is the following:

<span id="L1" class="line"><span class="k">do</span> <span class="p">{</span></span>
<span id="L2" class="line">    <span class="c1">//code to be executed atleast once</span></span>
<span id="L3" class="line"><span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="n">condition</span><span class="p">);</span></span>

Extra Information on For Loops and Nested Loops

Nothing between the parenthesis in a for loop are required for a for loop to run. (except the semicolons) The for loop does not need an exit condition or a variable initialization. This allows the for loop to be more flexible as a counter variable can be initialized and used inside and outside of the scope of the for loop.

When a loop is found inside of another loop, the inner loop is known as a nested loop. Nesting loops are commonly used in code. When the break command is used inside of a nested loop, the program will exit the innermost loop that it is currently in. That means, the program did not exit the larger loop yet and will require a separate break statement.

An demonstration of how for loops can be used and how nested loops works are shown below.

Example Code:
<span id="L1" class="line"><span class="cp">#include &lt;iostream&gt;</span></span>
<span id="L2" class="line"><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span></span>
<span id="L3" class="line"></span>
<span id="L4" class="line"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span></span>
<span id="L5" class="line">    <span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>    <span class="c1">// counter variable pre-initialized</span></span>
<span id="L6" class="line">    <span class="k">for</span> <span class="p">(;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">;)</span> <span class="p">{</span></span>
<span id="L7" class="line">    <span class="c1">// this for loop can be replaced with a while loop</span></span>
<span id="L8" class="line">    <span class="c1">// since there is not increase nor initialization</span></span>
<span id="L9" class="line">        <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span></span>
<span id="L10" class="line">            <span class="c1">// nests another loop if line 9 results true</span></span>
<span id="L11" class="line">            <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;;</span> <span class="n">j</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>      <span class="c1">// no condition</span></span>
<span id="L12" class="line">                <span class="k">if</span> <span class="p">(</span><span class="n">j</span> <span class="o">==</span> <span class="mi">3</span><span class="p">){</span></span>
<span id="L13" class="line">                    <span class="k">break</span><span class="p">;</span>              <span class="c1">//go to line 16</span></span>
<span id="L14" class="line">                <span class="p">}</span></span>
<span id="L15" class="line">                <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">i</span> <span class="o">&lt;&lt;</span> <span class="s">" "</span> <span class="o">&lt;&lt;</span> <span class="n">j</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span></span>
<span id="L16" class="line">            <span class="p">}</span></span>
<span id="L17" class="line">        <span class="p">}</span></span>
<span id="L18" class="line">        <span class="n">i</span><span class="o">++</span><span class="p">;</span> <span class="c1">// counters can be modified within the loop</span></span>
<span id="L19" class="line">    <span class="p">}</span></span>
<span id="L20" class="line">    <span class="c1">// variable i can still be used because it was not</span></span>
<span id="L21" class="line">    <span class="c1">// initialized inside of the for loop</span></span>
<span id="L22" class="line">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span></span>
<span id="L23" class="line"><span class="p">}</span></span>
Output:
0 0
0 1
0 2
2 0
2 1
2 2