Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you have logical or in case part of switch statment?

If you have a switch statement and want certain code to be run when the value is one value or another how do you do it? The following code always goes to the default case.

#include <iostream>
using namespace std;

int main()
{
    int x = 5;
    switch(x)
    {
        case 5 || 2:
            cout << "here I am" << endl;
            break;
        default:
            cout << "no go" << endl;
    }

    return 0;
}
like image 960
Celeritas Avatar asked Nov 29 '22 16:11

Celeritas


2 Answers

Like this:

switch (x)
{
case 5:
case 2:
    cout << "here I am" << endl;
    break;
}

Known as "falling through".

Just to point out that the reason the default case is executed in the posted code is that the result of 5 || 2 is 1 (true). If you set x to 1 in the posted code the 5 || 2 case would be executed (see http://ideone.com/zOI8Z).

like image 122
hmjd Avatar answered Dec 01 '22 05:12

hmjd


Make it fall through:

int main()
{
    int x = 5;
    switch(x)
    {
        case 5:
        // there's no break statement here,
        // so we fall through to 2
        case 2:
            cout << "here I am" << endl;
            break;
        default:
            cout << "no go" << endl;
    }

    return 0;
}

5 || 2, by the way, evaluates to 1 (or true, as it is a logical expression), you can try it.

like image 33
jrok Avatar answered Dec 01 '22 06:12

jrok