Search

7.10 — Break and continue

Break

Although you have already seen the break statement in the context of switch statements (7.4 -- Switch statement basics), it deserves a fuller treatment since it can be used with other types of loops as well. The break statement causes a while loop, do-while loop, for loop, or switch statement to end, with execution continuing with the next statement after the loop or switch being broken out of.

Breaking a switch

In the context of a switch statement, a break is typically used at the end of each case to signify the case is finished (which prevents fallthrough into subsequent cases):

See lesson %Failed lesson reference, id XX% for more information about fallthrough, along with some additional examples.

Breaking a loop

In the context of a loop, a break statement can be used to end the loop early. Execution continues with the next statement after the end of the loop.

For example:

This program allows the user to type up to 10 numbers, and displays the sum of all the numbers entered at the end. If the user enters 0, the break causes the loop to terminate early (before 10 numbers have been entered).

Here’s a sample execution of the above program:

Enter a number to add, or 0 to exit: 5
Enter a number to add, or 0 to exit: 2
Enter a number to add, or 0 to exit: 1
Enter a number to add, or 0 to exit: 0
The sum of all the numbers you entered is: 8

Break is also a common way to get out of an intentional infinite loop:

A sample run of the above program:

Enter 0 to exit or anything else to continue: 5
Enter 0 to exit or anything else to continue: 3
Enter 0 to exit or anything else to continue: 0
We're out!

Break vs return

New programmers sometimes have trouble understanding the difference between break and return. A break statement terminates the switch or loop, and execution continues at the first statement beyond the switch or loop. A return statement terminates the entire function that the loop is within, and execution continues at point where the function was called.

Here are two runs of this program:

Enter 'b' to break or 'r' to return: r
Function breakOrReturn returned 1
Enter 'b' to break or 'r' to return: b
We broke out of the loop
Function breakOrReturn returned 0

Continue

The continue statement provides a convenient way to end the current iteration of a loop without terminating the entire loop.

Here’s an example of using continue:

This program prints all of the numbers from 0 to 9 that aren’t divisible by 4:

1
2
3
5
6
7
9

Continue statements work by causing the current point of execution to jump to the bottom of the current loop.

In the case of a for loop, the end-statement of the for loop still executes after a continue (since this happens after the end of the loop body).

Be careful when using a continue statement with while or do-while loops. These loops typically change the value of variables used in the condition inside the loop body. If use of a continue statement causes these lines to be skipped, then the loop can become infinite!

Consider the following program:

This program is intended to print every number between 0 and 9 except 5. But it actually prints:

0 1 2 3 4

and then goes into an infinite loop. When count is 5, the if statement evaluates to true, and the continue causes the execution to jump to the bottom of the loop. The count variable is never incremented. Consequently, on the next pass, count is still 5, the if statement is still true, and the program continues to loop forever.

Of course, you already know that if you have an obvious counter variable, you should be using a for loop, not a while or do-while loop.

The debate over use of break and continue

Many textbooks caution readers not to use break and continue in loops, both because it causes the execution flow to jump around, and because it can make the flow of logic harder to follow. For example, a break in the middle of a complicated piece of logic could either be missed, or it may not be obvious under what conditions it should be triggered.

However, used judiciously, break and continue can help make loops more readable by keeping the number of nested blocks down and reducing the need for complicated looping logic.

For example, consider the following program:

This program uses a boolean variable to control whether the loop continues or not, as well as a nested block that only runs if the user doesn’t exit.

Here’s a version that’s easier to understand, using a break statement:

In this version, by using a single break statement, we’ve avoided the use of a Boolean variable (and having to understand both what its intended use is, and where its value is changed), an else statement, and a nested block.

Minimizing the number of variables used and keeping the number of nested blocks down both improve code comprehensibility more than a break or continue harms it. For that reason, we believe judicious use of break or continue is acceptable.

Best practice

Use break and continue when they simplify your loop logic.


7.11 -- Halts (exiting your program early)
Index
7.9 -- For statements

40 comments to 7.10 — Break and continue

  • (wrong comment... could you delete it? Thanks)

  • Ant

    In the second example, doesn't the line buffer take over and not count each individual character entered until you hit enter which breaks the loop?

  • Echo51

    In your first example, i get the error that when i compile it with Code:blocks, i can only press a button and send it once, before the "press enter to continue" message appears, terminating the window. this is anooying me as im making a Text RPG

  • zeb Noon

    Hye Alex!
    My question is "why you are using "nPrinted" int variable in your last two examples?

  • kevin

    In the second example, it seems like the nCount would be reset to zero every time, so that the for loop would never reach nCount = 80 and stop. That's what happened when I tried to run it. I'm wondering if I am misunderstanding the example. When I run the script, it only breaks if I type an enter.

  • mon

    please help me create a C++ program that will allow the user to input the number of students, name and score and finally displays the name with highest scores...

    say for example:

    input number of students = 10, it allows you to input name and scores 10 times. and finally it will print the highest score with name...

    thanks

  • chkwa

    this is just a correction.

    "For example, the following program prints all numbers from 0 to 99 which are not divisible by 3 or 4, and then prints out how many numbers were found that meet this criteria:"

    int nPrinted = 0;

    for (int iii=0; iii < 100; iii++)
    {
        // messy!
        if ((iii % 3)&&(iii % 4)) //may be it should be ||(or) and not &&(and)
        {
            cout << iii << endl;
            nPrinted++;
        }
    }
    
    cout << nPrinted << " numbers were found" << endl;
    
  • Thomas

    Hello Alex,

    Your first code example on how to use break and continue returns all numbers which can be divided by 3 and 4, while it is meant to do the opposite, shouldn't it be without the '!'s?

    e.g.

    int nPrinted = 0;
    
    for (int iii=0; iii < 100; iii++)
    {
        // messy!
        if ((iii % 3) && (iii % 4))
        {
            cout << iii << endl;
            nPrinted++;
        }
    }
    
    cout << nPrinted << " numbers were found" << endl;
    
    

    [ You are correct. Thanks for noticing. -Alex ]

  • Zomgie

    In your second code example, you start with #include but forget to add in

    using namespace std;

    Just a note, it made it confusing for those wanting to try out the code via execution.

    edit: Also, it seems that escaping the newline character was unnecessary. Checking for

    '\n'

    returned the following error whereas

    'n'

    executed cleanly.


    test.cpp:16:23: warning: multi-character character constant
    test.cpp: In function ‘int main()’:
    test.cpp:16: warning: comparison is always false due to limited range of data type

    • I fixed the issue with the using namespace std -- thanks. Escaping the newline character should be necessary, as '\n' and 'n' are two completely different characters. I note that in my examples above, '\n' was listed as '\\n', which I have also fixed.

  • perouf

    In the first example of the continue statemant you say that:
    This program prints all of the numbers from 0 to 19 that aren’t divisible by 4.
    But its exactly the other way. All the numbers that are divisible by 4 get printed.
    In the example after that, the program only prints: 1 2 3 4 and then its stuck.
    regards Perouf

    [ Fixed! Thanks for noticing. -Alex ]

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">