- •6 Глава 1
- •12 Глава 1
- •14 Глава 1
- •16 Глава 1
- •18 Глава 1
- •20 Глава 1
- •22 Глава 1
- •24 Глава 1
- •26 Глава 1
- •31 Глава 1
- •34 Глава 2
- •36 Глава 2
- •Puc. 2.4. Дополнительные опции консольного приложения Win32
- •38 Глава 2
- •40 Глава 2
- •42 Глава 2
- •44 Глава 2
- •48 Глава 2
- •50 Глава 2
- •52 Глава 2
- •54 Глава 2
- •56 Глава 2
- •58 Глава 2
- •60 Глава 2
- •62 Глава 2
- •64 Глава 2
- •66 Глава 2
- •68 Глава 2
- •70 Глава 2
- •74 Глава 2
- •76 Глава 2
- •79 Глава 2
- •82 Глава 2
- •84 Глава 2
- •86 Глава 2
- •88 Глава 2
- •92 Глава 2
- •94 Глава 2
- •96 Глава 2
- •98 Глава 2
- •103 Глава 2
- •105 Глава 2
- •107 Глава 2
- •110 Глава 2
- •115 Глава 3
- •119 Глава 3
- •121 Глава 3
- •123 Глава 3
- •125 Глава 3
- •129 Глава 3
- •131 Глава 3
- •133 Глава 3
- •139 Глава 3
- •141 Глава 3
- •143 Глава 3
- •145 Глава 3
- •148 Глава 3
- •150 Глава 3
- •155 Глава 3
- •165 Глава 4
- •168 Глава 4
- •170 Глава 4
- •173 Глава 4
- •175 Глава 4
- •178 Глава 4
- •184 Глава 4
- •186 Глава 4
- •188 Глава 4
- •190 Глава 4
- •192 Глава 4
- •194 Глава 4
- •198 Глава 4
- •201 Глава 5
- •203 Глава 5
- •205 Глава 5
- •207 Глава 5
- •213 Глава 5
- •217 Глава 5
- •219 Глава 5
- •221 Глава 5
- •223 Глава 5
- •225 Глава 5
- •227 Глава 5
- •232 Глава 5
- •234 Глава 5
- •236 Глава 5
129 Глава 3
если бы два константы case были одинаковы, то компилятор не мог бы определить, какой из операторов, следующих за case, необходимо выполнить; однако разные case не обязаны вести к уникальным действиям. Несколько ветвей case могут раз- делять одно и то же действия, как показано ниже
Описание полученных результатов
В данном примере вы имеете более использовано более сложное выражение в switch. Если введенный символ не является буквой в нижнем регистре, то выражение:
даст в результате false, иначе — true. Поскольку letter умножается на это выра- жение, значение логического выражения приводится к целому (0, если выражение ложно, и 1 — если истинно). Таким образом, выражение switch равно 0, если введен- ный символ не является буквой нижнего регистра, в противоположном случае оно равно самому введенному символу. То есть оператор, следующий за case 0, выполня- ется всякий раз, когда код символа, сохраненного в letter, не является прописной буквой нижнего регистра.
Если же введена прописная буква, то выражение switch в результате вычисления дает само значение этой буквы, поэтому для того, чтобы выдать сообщение о том, что введенная буква — гласная, оператор вывода помещается после серии меток case, каждая из которых сравнивает значение с одной из гласных букв. Один и тот же опе- ратор выполняется для любой гласной, потому что когда обнаруживается подходящая метка case, то после этого выполняются все последующие операторы — до тех пор, пока не встретится break. Вы можете видеть, что одно и то же действие может соот-
Решения
и
циклы
ветствовать нескольким последовательным меткам case, размещенным перед опера- тором, выполняющим это действие. Если же будет введена согласная буква, то выпол- нится оператор, следующий за меткой default.
Безусловное ветвление
Оператор if предоставляет вам возможность гибко выбирать один или другой на- бор операторов, в зависимости от указанного условия, то есть последовательность вы- полнения операторов варьируется в зависимости от данных программы. В отличие от этого, оператор goto — грубый инструмент. Он позволяет вам перейти к определен- ному оператору программы безо всяких условий. Оператор, на который выполняет- ся переход, должен быть идентифицирован меткой — идентификатором, определен- ным в соответствии с теми же правилами, которым подчиняются имена переменных. Метка должна быть снабжена двоеточием и помещена перед оператором, к которому выполняется переход. Ниже представлен пример помеченного оператора.
Оператор имеет метку myLabel, и безусловный переход к этому оператору в про- грамме записывается так:
Где только возможно, вы должны избегать в своих программах применения goto. Это порождает запутанный код, который чрезвычайно трудно отследить.
Поскольку теоретически goto не является необходимым в программах— применению goto всегда существует альтернатива— большая часть программистов считает, что использо- вать его вообще никогда не следует. Я не подпишусь под этой крайней точкой зрения. В кон- це концов, это — законный оператор языка, и бывают случаи, когда применить его удобно. Однако я рекомендую, чтобы он использовался только тогда, когда очевидно его преимуще- ство перед другими возможными вариантами организации кода. В противном случае вы рискуете получить запутанный, подверженный ошибкам код, который трудно понять и еще труднее сопровождать.
Повторение блока операторов
Возможность повторно выполнять группу операторов — фундаментальна для боль- шинства приложений. Без этой возможности организации пришлось бы модифици- ровать программу начисления зарплаты всякий раз, когда нанимается новый сотруд- ник, и вам пришлось бы перезагружать Halo 2 всякий раз, когда вы хотите сыграть в другую игру. Поэтому давайте разберемся, как работают циклы.
Что такое цикл?
Цикл выполняет последовательность операторов до тех пор, пока истинно (или ложно) определенное условие. Вы можете написать цикл, используя лишь те операто- ры С++, с которыми вы познакомились до сих пор. Вам понадобится для этого только if и "страшный" goto. Взгляните на следующий пример.