Search code examples
c++cswitch-statementbreakcontinue

Using continue in a switch statement


I want to jump from the middle of a switch statement, to the loop statement in the following code:

while (something = get_something())
{
    switch (something)
    {
    case A:
    case B:
        break;
    default:
        // get another something and try again
        continue;
    }
    // do something for a handled something
    do_something();
}

Is this a valid way to use continue? Are continue statements ignored by switch statements? Do C and C++ differ on their behaviour here?


Solution

  • It's fine, the continue statement relates to the enclosing loop, and your code should be equivalent to (avoiding such jump statements):

    while (something = get_something()) {
        if (something == A || something == B)
            do_something();
    }
    

    But if you expect break to exit the loop, as your comment suggest (it always tries again with another something, until it evaluates to false), you'll need a different structure.

    For example:

    do {
        something = get_something();
    } while (!(something == A || something == B));
    do_something();