|
Программирование >> Структурное программирование
Введите символ EOF по окончании ввода. D F С Е Введена неправильная буквенная оценка. Введите новую оценку J < D А В S.S- Количество различных оценок: А: 3 В: 2 С: 3 D: 2 F: 1 Рис. 2.22. Пример использования switch (часть 2 из 2) Оператор присваивания в ряде случаев можно рассматривать как единое целое, как некое выражение, значение которого равно значению, присвоенному переменной слева от символа =. Таким образом, значение присваивания grade = cin.get() равно значению, возвращенному функцией cin.get() и присвоенному переменной grade. Тот факт, что операторы присваивания имеют значение, можно использовать для задания одного и того же начального значения сразу нескольким переменных. Например, в операторе а = b = с = 0; сначала выполняется присваивание с = О (так как операция присваивания = имеет ассоциативность справа налево). Затем переменной b присваивается значение присваивания с = О (которое равно 0). Затем переменной а присваивается значение присваивания b = (с = О) (которое тоже равно 0). В нашей программе значение присваивания grade = cin.get() сравнивается со значением EOF - символа, который установлен для конца файла . Мы используем EOF (который обычно имеет значение -1) как значение метки. Пользователь нажимает зависящую от системы комбинацию клавиш, означающую конец файла , т.е. как бы говорит: У меня нет больше данных для ввода . EOF - символическая целая константа, определенная в головном файле <iostream.h>. Если значение, присвоенное переменной grade, равно EOF, то программа заканчивается. В данной программе мы выбрали для символа представление int, так как EOF - целая величина (повторим, что обычно она равна -1). Замечание по мобильности 2.1 Комбинация клавиш для ввода признака конца файла зависит от системы. Введите буквенную оценку. Замечание по мобильности 2.2 Проверка на символическую конаанту EOF, а не на -1 делает программу более мобильной. Стандарт ANSII устанавливает, что EOF имеет целое отрицательное значение (но не обязательно -1). Так что EOF может иметь различные значения в разных системах. В системе UNIX и многих других признак конца файла вводится комбинацией <ctrl-d> в последней строке. Эта нотация означает одновременное нажатие клавиши Ctrl и клавиши d. В других системах, таких, как VAX VMS корпорации DEC или MS-DOS корпорации Microsoft признак конца файла вводится нажатием <ctrl-z> Пользователь вводит оценки с клавиатуры. Когда он нажимает клавишу возврата каретки или ввода, символы читаются функцией cin.get() по одному за раз. Если введенный символ не признак конца файла, начинает работать структура switch. За ключевым словом switch следует в скобках имя переменной grade. Это так называемое управляющее выражение. Предположим, пользователь ввел в качестве оценки букву С. С автоматически сравнивается с каждым условием case в структуре switch. Если встречается совпадение (case С :), то выполняется оператор, следующий за этой меткой case. В случае буквы С переменная cCount увеличивается на 1 и работа структуры switch немедленно завершается по оператору break. Оператор break вызывает передачу программного управления на первый оператор после структуры switch. Оператор break используется потому, что в противном случае условия case в операторе switch работают совместно. Если везде в структуре switch не использовать break, тогда каждый раз, когда одно из условий case удовлетворяется, будут выполняться операторы всех последующих меток case. Если ни одно условие не выполнено, то выполняются операторы после метки default (умолчание), печатающие в нашей программе сообщение об ошибке. После каждой метки case может быть предусмотрено одно или более действий. Структура switch отличается от всех других структур тем, что при нескольких действиях после case не требуется заключать их в фигурные скобки. В общем случае структура множественного выбора switch при использовании break в каждом разделе case соответствует блок-схеме, приведенной на рис. 2.23. Из этой блок-схемы видно, что каждый оператор break в конце case вызывает немедленный выход из структуры switch. Отметим снова, что (не считая маленьких окружностей и линий связи) блок-схема содержит только символы прямоугольников и ромбов. Представьте себе опять, что программист имеет доступ к глубокому бункеру, содержащему пустые структуры switch - столько, сколько может потребоваться программисту для складывания их пачками и вложения в другие управляющие структуры, чтобы структурированно отобразить управляющую логику алгоритма. И затем эти прямоугольники и ромбы заполняются необходимыми действиями и условиями выбора в соответствии с алгоритмом. Вложенные управляющие структуры - дело обычное, но вложенные структуры switch в программах встречаются редко. Типичная ошибка программирования 2.17 Забывают вставить оператор break, когда он нужен в структуре switch. Типичная ошибка программирования 2.18 Пропуск пробела между ключевым словом case и целым значением, которое проверяется в структуре switch, может вызвать логическую ошибку. Например, запись case3: вмеао case 3: проао создаа неиспользуемую метку (мы поговорим об этом подробнее в главе 18). Дело в том, что в этой структуре switch не будут совершены соответавующие действия, когда управляющее выражение switch будет иметь значение 3. Хороший стиль программирования 2.23 Вставляйте метку default в оператор switch. Случаи неудачных проверок в операторе switch без метки default будут игнорироваться. Включение метки default фиксирует внимание программиста на необходимоаи обрабатывать исключительную ситуацию. Но бывают ситуации, в которых никакой обработки по метке default не требуется. Хороший стиль программирования 2.24 Хотя предложения case и default могут размещаться в структуре switch в произвольном порядке, стоит учесть практику качественного программирования - помещать default в конце. true действия в случае а break false true действия в случае ь > break false
действия по умолчанию Рис. 2.23. Структура множественного выбopswitch
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.494
При копировании материалов приветствуются ссылки. |