Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Рис. 7.3. Сравнение операторов break u continue
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
Без break выполнялись бы все операторы между тем, который имеет совпадающую метку, и концом switch. Например, если вы удалите все операторы break, а затем запустите программу и введете букву в, будет получен следующий вывод:
Дайте мне букву алфавита, и я укажу вам название животного, начинающееся с этой буквы.
Введите букву или # для завершения, в [enter]
выхухоль, водоплавающее существо ехидна, игольчатый муравьед рыболов, светло-коричневая куница Вопрос озадачил!
Введите следующую букву или # для завершения.
# [enter]
Программа завершена.
Были выполнены все операторы, начиная с case 'в' : и до конца оператора
switch.
Кстати, break работает и с циклами и с оператором switch, в то время как continue — только с циклами. С другой стороны, continue может применяться внут-
280 Глава 7 ри оператора switch, если switch находится в цикле. В такой ситуации, как и с другими циклами, continue заставляет программу пропустить остальные операторы цикла, включая другие части switch.
Если вы знакомы с языком Pascal, то можете отметить большое сходство switch с оператором case в Pascal. Самое важное различие между ними связано с тем, что switch требует использования оператора break, если нужно, чтобы выполнялся только помеченный оператор. Кроме того, в конструкции case языка С нельзя применять диапазон.
Проверочное выражение в круглых скобках внутри switch должно иметь целочисленное значение (включая тип char). Метки case должны быть константами целочисленного типа (в том числе char) или целочисленными константными выражениями (выражениями, которые содержат только целочисленные константы). Указывать для метки case переменную не допускается. Ниже приведена структура оператора switch.
switch {целочисленное-выражение)
{
case константа1:
операторы <- не обязательно
case константа2\
операторы <- не обязательно
default: <- не обязательно
операторы <- не обязательно
}
Чтение только первого символа строки
Еще одна новая особенность программы animals. с связана с тем, как она читает входные данные. Возможно, вы уже заметили во время выполнения этой программы, что при вводе вап был обработан только первый символ. Такое поведение с отбрасыванием оставшейся части строки часто является желательным в интерактивных программах, ожидающих односимвольные ответы. Указанное поведение обеспечивает следующий код:
Читать дальшеИнтервал:
Закладка: