276 глава 7
Иногда оператор break используется для выхода из цикла, когда для этого существуют две отдельные причины. Программа, показанная в листинге 7.10, содержит цикл для вычисления площади прямоугольника. Цикл прекращается при вводе нечислового значения для длины или ширины прямоугольника.
Листинг 7.10. Программа break.с

Цикл можно было бы реализовать следующим образом:
while (scanf("%f %f", slength, swidth) == 2)
Однако применение оператора break существенно упрощает эхо-вывод вводимых значений.
Как и continue, не используйте оператор break, если это приводит к усложнению кода. Взгляните, например, на следующий цикл:
while ((ch = getchar()) != '\n')
{
if (ch = ‘\t') break;
putchar(ch);
}
Логика программы станет яснее, если выполнять обе проверки в одном месте:
while ( (ch = getchar()) != ‘\n ' &&ch != ‘\ t') putchar(ch);
Оператор break является важным дополнением оператора switch, который будет рассматриваться следующим.
Оператор break передает управление оператору, который находится непосредственно после цикла; в отличие от случая с continue внутри цикла for, пропускается обновляющая часть раздела управления цикла. Оператор break, помещенный внутрь вложенного цикла, приводит к выходу только из внутреннего цикла; для выхода из внешнего цикла необходим еще один break:
Управляющие операторы С: ветвление и переходы 277
int р, q;
scanf("%d", &р);
while ( р > 0)
{
printf("%d\n", p); scanf("%d", &q); while ( q > 0)
{
printf("%d\n",p*q); if (q > 100)
break; // выход из внутреннего цикла
scanf("%d", &q);
}
if (q > 100)
break; // выход из внешнего цикла
scanf("%d", &p);
}
Выбор из множества вариантов: операторы switch И break
Условная операция и конструкция if else облегчают написание программ, в которых производится выбор между двумя альтернативами. Однако временами в программе должен делаться выбор одного варианта из множества альтернатив. Это можно реализовать с помощью конструкции if else if...else, но во многих случаях удобнее применять оператор switch. Работа этого оператора демонстрируется в листинге 7.11. Данная программа читает букву и отвечает выводом названия животного, которое начинается с такой буквы.
Листинг 7.11. Программа animals. с


глава 7
Мы ограничились лишь несколькими буквами, но можно было продолжить в том же духе. Давайте рассмотрим пример выполнения этой программы, после чего проанализируем ее структуру:
Дайте мне букву алфавита, и я укажу вам название животного, начинающееся с этой буквы.
Введите букву или # для завершения, a [enter]
архар, дикий горный азиатский баран Введите следующую букву или # для завершения, вал [enter]
выхухоль, водоплавающее существо
Введите следующую букву или # для завершения.
ф [enter]
Вопрос озадачил!
Введите следующую букву или # для завершения.
Е [enter]
Распознаются только строчные буквы.
Введите следующую букву или # для завершения.
# [enter]
До свидания.
Две основных особенности программы касаются использования оператора switch и обработки вводимых данных. Для начала необходимо ознакомиться с тем, как работает оператор switch.
Использование оператора switch
Первым делом вычисляется выражение в круглых скобках, следующее за словом switch. В этом случае оно представляет собой значение, которое переменная ch получила в результате последнего ввода. Затем программа просматривает список меток (здесь это case ' а ' :, case ' б' : и т.д.), пока не найдет совпадающее значение. После этого программа переходит на данную строку. А что произойдет, если совпадений не найдено? Если в операторе предусмотрена строка, помеченная как default:, то про-
Управляющие операторы С: ветвление и переходы 279
грамма перейдет на нее. В противном случае выполнение продолжится с оператора, следующего после switch.
Что можно сказать об операторе break? Он заставляет программу выйти из оператора switch и перейти к оператору, находящемуся после switch (рис. 7.4).

Рис. 7.4. Петит управления в onepamopax switch си без тераторов break
Читать дальше