Читаем Программирование полностью

    break;

  default:

    cout << "Извините, я не знаю, что такое '" << unit << "'\n";

    break;

  }

}

  Синтаксис оператора switch архаичен, но он намного яснее вложенных инструкций if, особенно если необходимо сравнить значение со многими константами. Значение, указанное в скобках после ключевого слова switch, сравнивается с набором констант. Каждая константа представлена как часть метки case. Если значение равно константе в метке case, то выбирается инструкция из данного раздела case. Каждый раздел case завершается ключевым словом break. Если значение не соответствует ни одной метке case, то выбирается оператор, указанный в разделе default. Этот раздел не обязателен, но желателен, чтобы гарантировать перебор всех альтернатив. Если вы еще не знали, то знайте, что программирование приучает человека сомневаться практически во всем.

<p id="AutBody_Root049"><strong>4.4.1.3. Технические подробности инструкции switch</strong></p>

Здесь под техническими подробностями подразумеваются следующие детали, касающиеся инструкции switch.

1. Значение, которое определяет выбор варианта, должно иметь тип int, char или enum (см. раздел 9.5). В частности, переключение по строке произвести невозможно.

2. Значения меток разделов case должны быть константными выражениями (см. раздел 4.3.1). В частности, переменная не может быть меткой раздела case.

3. Метки двух разделов case не должны иметь одинаковые значения.

4. Один раздел case может иметь несколько меток.

5. Не забывайте, что каждый раздел case должен завершаться ключевым словом break. К сожалению, компилятор не предупредит вас, если вы забудете об этом.

Рассмотрим пример.

int main() // переключение можно производить только по целым

           // числам и т.п.

{

  cout << "Вы любите рыбу?\n";

  string s;

  cin >> s;

  switch (s) { // ошибка: значение должно иметь тип int,

               // char или enum

  case " нет ":

    // ...

    break;

  case " да ":

    // ...

    break;

  }

}

Для выбора альтернатив по строке следует использовать инструкцию if или ассоциативный массив (подробнее об этом речь пойдет в главе 21). Инструкция switch генерирует оптимизированный код для сравнения значения с набором констант. Для крупных наборов констант он обычно создает более эффективный код по сравнению с коллекцией инструкций if. Однако это значит, что значения меток разделов case должны быть разными константами. Рассмотрим пример.

int main() // метки разделов case должны быть константами

{

  // определяем альтернативы:

  int y = 'y'; // это может создать проблемы

  const char n = 'n';

  const char m = '?';

  cout << "Вы любите рыбу ?\n";

  char a;

  cin >> a;

  switch (a) {

  case n:

    // ...

    break;

  case y:  // ошибка: переменная метка раздела case

    // ...

    break;

  case m:

    // ...

    break;

  case 'n': // ошибка: дубликат метки раздела case

            // (значение метки n равно 'n')

    // ...

    break;

  default:

    // ...

    break;

  }

}

Часто для разных значений инструкции switch целесообразно выполнить одно и то же действие. Было бы утомительно повторять это действие для каждой метки из этого набора. Рассмотрим пример.

int main() // одна инструкция может иметь несколько меток

{

  cout << "Пожалуйста, введите цифру \n";

  char a;

  cin >> a;

  switch (a) {

  case '0': case '2': case '4': case '6': case '8':

    cout << " четная \n";

    break;

  case '1': case '3': case '5': case '7': case '9':

    cout << " нечетная \n";

    break;

  default:

    cout << " не цифра \n";

    break;

  }

}

  Чаще всего, используя инструкцию switch, программисты забывают завершить раздел case ключевым словом break. Рассмотрим пример.

int main() // пример плохой программы (забыли об инструкции break)

{

  const double cm_per_inch = 2.54; // количество сантиметров

                                   // в дюйме

  double length = 1;  // длина в дюймах или сантиметрах

  char unit = 'a';

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных