Язык программирования C++. Вводный курс


Инструкция switch - часть 2


·                  необязательной метки default, которая является аналогом части else инструкции if-else. Инструкции, соответствующие этой метке, выполняются, если условие не отвечает ни одной из меток case. Например, мы можем подсчитать суммарное количество встретившихся символов, не являющихся гласными буквами:

default: // любой символ, не являющийся гласной

    ++non_vowe1_cnt;

Константное выражение в метке case

должно принадлежать к целому типу, поэтому следующие строки ошибочны:

// неверные значения меток

case 3.14: // не целое

case ival: // не константа

Кроме того, две разные метки не могут иметь одинаковое значение.

Выражение условия в инструкции switch

может быть сколь угодно сложным, в том числе включать вызовы функций. Результат вычисления условия сравнивается с метками case, пока не будет найдено равное значение или не выяснится, что такого значения нет. Если метка обнаружена, выполнение будет продолжено с первой инструкции после нее, если же нет, то с первой инструкции после метки default (при ее наличии) или после всей составной инструкции switch.

В отличие от if-else

инструкции, следующие за найденной меткой, выполняются друг за другом, проходя все нижестоящие метки case и метку default. Об этом часто забывают. Например, данная реализация нашей программы выполняется совершенно не так, как хотелось бы:

#include <iostream>

 

int main()

{

    char ch;

    int aCnt=0, eCnt=0, iCnt=0, oCnt=0, uCnt=0;

 

    while ( cin >> ch )

        // Внимание! неверная реализация!

        switch ( ch ) {

            case 'a':

                ++aCnt;

            case 'e':

                ++eCnt;

            case 'i':

                ++iCnt;

            case 'o':

                ++oCnt;

            case 'u':

                ++uCnt;

        }

 

    cout << "Встретилась a: \t" << aCnt << '\n'

         << "Встретилась e: \t" << eCnt << '\n'

         << "Встретилась i: \t" << iCnt << '\n'

         << "Встретилась o: \t" << oCnt << '\n'

         << "Встретилась u: \t" << uCnt << '\n';

<


Начало  Назад  Вперед