Выбрать главу

color = 3;    /* несоответствие типа */

Позже мы рассмотрим другие ограничения при использовании констант и переменных типа enum. Сначала более внимательно рассмотрим значения констант типа enum.

Значения по умолчанию

Наш пример проиллюстрировал присваивание константам значений по умолчанию. Константам, появляющимся в описании enum, присваиваются целые числа 0, 1, 2 и т. д. в порядке их расположения. Так, описание

enum kids {nippy, slats, skip, nana, liz};

присваивает nаnа значение 3.

Присвоенные значения

Можно выбирать значения, которые вы хотите присвоить константам, но они должны быть целого типа (включая char). Для этого включите желаемыe значения в описание:

enum levels {low = 100, medium = 500, high = 2000};

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

enum feline {cat = 20, tiger, lion, puma};

присваивает переменной tiger значение 21, переменной lion - значение 22 и puma - значение 23.

Операции

Теперь рассмотрим, что можно и нельзя делать с величинами типа enum.

Вы можете присвоить константу типа enum переменной того же типа

enum feline pet;

pet = tiger;

Нельзя использовать другие операции присваивания:

pet += cat; /* недопустимо */

Можно провести сравнение с целью выявления равенства или неравенства:

if ( per = = cat) ...

if ( color ! = violet)...

Нельзя использовать другие операции отношения:

if(color > yellow) /* недопустимо */

Можно применять арифметические операции к константам типа enum:

color = red + blue;

pet = puma * lion;

Имеют ли такие выражения какой-то смысл - это уже другой вопрос.

Нельзя использовать арифметическиe операции для переменных типа enum:

color = color + green; /* недопустимо */

Нельзя использовать операции yвеличения и уменьшения:

color++ ; /* недопустимо */

Нельзя использовать константу типа enum для индекса массива:

marbles[red] = 23; /* недопустимо */ 

ПРИМЕНЕНИЕ

Основная причина использования типа enum заключается в улучшении читаемости программ. Если вы имеете дело с некоторым видом цветовых кодов, то использование red и blue что обычно типы enum предназначены для использования внутри программы, а не для ввода-вывода. Например, если вы хотите ввести значение для переменной color типа spectrum, то должны были бы ввести, скажем, целое число 1, а не слово orange. (Конечно, можно было бы создать функцию ввода, которая восприняла бы строку "orange" и затем преобразовала бы ее в целое число orange.)  

ПРИЛОЖЕНИЕ К. ТАБЛИЦА КОДОВ ASCII

Числовые преобразования

Числовые преобразования десятичное - шестнадцатеричное - восьмеричное - двоичное - ASCII

Десятеричное Шестнадцатеричное Восьмеричное Двоичное ASCII Ключ*
X10 X16 X8 PXx
0 0 0 0 NUL CTRL/I
1 1 1 10000001 SOH CTRL/A
2 2 2 10000010 STX CTRL/B
3 3 3 11 ЕТХ CTRL/C
4 4 4 10000100 EOT CTRL/D
5 5 5 101 ENQ CTRL/E
6 6 6 110 АСК CTRL/F
7 7 7 10000111 BEL CTRL/G
8 8 10 10001000 BS СTRL/H,возврат
9 9 11 1001 HT CTRL/I,табуляция
10 12 1010 LF CTRL/J,новая строка
11 0B 13 10001011 VT CTRL/K
12 14 1100 FF CTRL/L
13 0D 15 10001101 CR CTRL/M,возврат
14 0E 16 10001110 SO CTRL/N
15 0F 17 1111 SI CTRL/O