Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A.doc
Скачиваний:
36
Добавлен:
09.04.2015
Размер:
5.6 Mб
Скачать

129 Глава 3

если бы два константы case были одинаковы, то компилятор не мог бы определить, какой из операторов, следующих за case, необходимо выполнить; однако разные case не обязаны вести к уникальным действиям. Несколько ветвей case могут раз- делять одно и то же действия, как показано ниже

Описание полученных результатов

В данном примере вы имеете более использовано более сложное выражение в switch. Если введенный символ не является буквой в нижнем регистре, то выражение:

даст в результате false, иначе — true. Поскольку letter умножается на это выра- жение, значение логического выражения приводится к целому (0, если выражение ложно, и 1 — если истинно). Таким образом, выражение switch равно 0, если введен- ный символ не является буквой нижнего регистра, в противоположном случае оно равно самому введенному символу. То есть оператор, следующий за case 0, выполня- ется всякий раз, когда код символа, сохраненного в letter, не является прописной буквой нижнего регистра.

Если же введена прописная буква, то выражение switch в результате вычисления дает само значение этой буквы, поэтому для того, чтобы выдать сообщение о том, что введенная буква — гласная, оператор вывода помещается после серии меток case, каждая из которых сравнивает значение с одной из гласных букв. Один и тот же опе- ратор выполняется для любой гласной, потому что когда обнаруживается подходящая метка case, то после этого выполняются все последующие операторы — до тех пор, пока не встретится break. Вы можете видеть, что одно и то же действие может соот-

Решения и циклы 130

ветствовать нескольким последовательным меткам case, размещенным перед опера- тором, выполняющим это действие. Если же будет введена согласная буква, то выпол- нится оператор, следующий за меткой default.

Безусловное ветвление

Оператор if предоставляет вам возможность гибко выбирать один или другой на- бор операторов, в зависимости от указанного условия, то есть последовательность вы- полнения операторов варьируется в зависимости от данных программы. В отличие от этого, оператор goto — грубый инструмент. Он позволяет вам перейти к определен- ному оператору программы безо всяких условий. Оператор, на который выполняет- ся переход, должен быть идентифицирован меткой — идентификатором, определен- ным в соответствии с теми же правилами, которым подчиняются имена переменных. Метка должна быть снабжена двоеточием и помещена перед оператором, к которому выполняется переход. Ниже представлен пример помеченного оператора.

Оператор имеет метку myLabel, и безусловный переход к этому оператору в про- грамме записывается так:

Где только возможно, вы должны избегать в своих программах применения goto. Это порождает запутанный код, который чрезвычайно трудно отследить.

Поскольку теоретически goto не является необходимым в программах— применению goto всегда существует альтернатива— большая часть программистов считает, что использо- вать его вообще никогда не следует. Я не подпишусь под этой крайней точкой зрения. В кон- це концов, это — законный оператор языка, и бывают случаи, когда применить его удобно. Однако я рекомендую, чтобы он использовался только тогда, когда очевидно его преимуще- ство перед другими возможными вариантами организации кода. В противном случае вы рискуете получить запутанный, подверженный ошибкам код, который трудно понять и еще труднее сопровождать.

Повторение блока операторов

Возможность повторно выполнять группу операторов — фундаментальна для боль- шинства приложений. Без этой возможности организации пришлось бы модифици- ровать программу начисления зарплаты всякий раз, когда нанимается новый сотруд- ник, и вам пришлось бы перезагружать Halo 2 всякий раз, когда вы хотите сыграть в другую игру. Поэтому давайте разберемся, как работают циклы.

Что такое цикл?

Цикл выполняет последовательность операторов до тех пор, пока истинно (или ложно) определенное условие. Вы можете написать цикл, используя лишь те операто- ры С++, с которыми вы познакомились до сих пор. Вам понадобится для этого только if и "страшный" goto. Взгляните на следующий пример.