Оператор if внутри оператора switch? - PullRequest
0 голосов
/ 25 февраля 2012

Мне трудно понять, почему один путь работает, а другой нет.

У меня есть;

switch (key)
        {
            //If Game over Label is visible, enable the m and e buttons
            if(mGameOverLabel->GetVisible())
            {
                case 'm': case 'M':
                    ResetScreen();
                    break;

                case 'e': case 'E':
                //  //Exit the game
                    Stop();
                    break;
            } else {

                case ' ':
                    mSpaceship->Shoot();
                    break;

                default:
                    break;
            }

Для случая m и e, даже если для mGameOverLabel установлено значение false в это текущее время, я все равно могу нажимать M и E, и они будут реагировать в соответствии с методами, но если я изменю его на это для M, это тогда будет работать только тогда, когда мне это нужно. Я что-то здесь упускаю?!

switch (key)
        {
            //If Game over Label is visible, enable the m and e buttons

            case 'm': case 'M':
                if(mGameOverLabel->GetVisible()) ResetScreen();
                break;
            }   

1 Ответ

7 голосов
/ 25 февраля 2012

switch в основном делает goto для соответствующей метки регистра.Любая логика выше case не будет выполнена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...