Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Символьный тип



Мы уже знаем, как объявить переменную символьного типа, правила записи символьных констант. Каждый символ занимает один байт.

Для ввода одного символа можно использовать функции getchar, getch или getche. От их выбора зависит, надо ли при вводе символа нажимать не только на клавишу вводимого символа, но и дополнительно на “Ввод” (да для getchar, нет для getch, и нетдля getche). Во-вторых, эти стандартные функции влияют на отображение набираемого на клавиатуре символа на экране (да, нет, да).

Для вывода символа вместо cout удобнее использовать функции printf или cprintf, так как с помощью форматов (“ %c ” или “ %d ”) можно указать, что мы выводим, символ или его код (см. пример 19).

Среди символов есть такие, которые нельзя ввести обычным способом, так как их нет на алфавитно–цифровой клавиатуре. Они называются символами псевдографики. Для их ввода курсор подводим в нужное место и нажимаем “ Alt ”. При включённом цифровом режиме (клавиша NumLock) код символа набираем справа на клавиатуре. Во время набора ничего не отображается, но когда отпустим клавишу “ Alt ”, в соответствующем месте появится символ псевдографики с набранным кодом. Такие символы в функцию можно передать, как и обычные символы, двумя способами: с помощью его числового кода или вышеописанным способом набрать такой символ.

Пример 18. Составить и проверить функцию, которая рисует границу прямоугольника. Параметры функции: x0, y0 — текстовые координаты левого верхнего угла; n1,n2 — размеры прямоугольника.

void ramka (int x0, int y0, int n1, int n2)

{ int x,y,i; x=x0; y=y0;

gotoxy(x,y++); printf("%c",218);

for (i=0;i<n1-2;i++) { gotoxy(x,y++); printf("%c", 179); }

gotoxy(x++,y); printf("%c",192);

for (i=0;i<n2-2;i++) { gotoxy(x++,y); printf("%c",196); }

gotoxy(x,y--); printf("%c",217);

for(i=0;i<n1-2;i++) { gotoxy(x,y--); printf("%c",179); }

gotoxy(x--,y); printf("%c",191);

for(i=0;i<n2-2;i++) { gotoxy(x--,y); printf("%c",196); }

}

int main ()

{ ramka (2,5, 10, 30); getch(); return 0; }

В программе использовались кодыследующих символов псевдографики:

218 для левого верхнего угла;

179 — для вертикальной линии;

192 — для левого нижнего угла;

196 — для горизонтальной линии;

217 — для правого нижнего угла;

191 — для правого верхнего угла.

Пример 19. Другие особенности символов можно увидеть, выполнив программу для вывода кодовой таблицы. то есть всехсимволов, в том числе и символов псевдографики, и их кодов:

main()

{ clrscr(); textcolor(10);

for (int i=1; i<256; i++)

{ cprintf("%4d",i); printf("%c%c", i, i%12?' ':'\n'); }

getch(); return 0;

}

В цикле по формату "%4d” выводим код символа указанным в textcolor 10-м цветом, а по формату "%c” — символ с этим кодом цветом по умолчанию. Если i не кратно 12, т.е. i%12!= 0, то выводим пробел. В противном случае с помощью '\n' переходим на следующую строку экрана.

Анализ кодовой таблицыпозволяет отметить следующие особенности символов:

· цифры в таблице располагаются подряд, цифра 0 имеет код 48, у цифры 1 код 49, и т. д., цифра 9 имеет код 57;

· как прописные, так и строчные латинские буквы располагаются непрерывно в алфавитном порядке с кодами 65—90 для больших и 97—122 для маленьких букв;

· русские прописные буквы располагаются также подряд (коды 128—159);

· маленькие русские буквы терпят разрыв, буквы от ‘а’ (код 160) до ‘п’ (175) следуют подряд. После буквы ‘п’ размещаются символы псевдографики, а затем русский алфавит продолжается с буквы ‘р’ (224) до ‘я’(239).

Рассмотрим совместимость символьного и целого типов, что характерно для языка С++. В переменной типа char можно хранить как символы (точнее, их коды), так и целые однобайтные числа. Для переменных типа char определены те же операции, что и для типа int, например, получение остатка от целочисленного деления (%), сложение и другие.

Пример 20. В языке С++, в отличие от Pascal, можно выполнить следующий фрагмент: char a='5', b=5; cout<<a<<b << a%b<<" "<<a/b;

В результате выведем символ 5, символ с кодом 5 (см. кодовую таблицу), 3, 10. Почему? В переменной a хранится код символа ‘5’, т. е. целое число 53 (48+5, где 48 — код нуля), а в переменной b — обычное целое число 5, а 53 % 5 = 3, 53 / 5 = 10. Заметим, что если объявим int a=53, b=5; то выведем 53, 5, 3, 10. Если, что интереснее, int a=’5’, b=5; то получим то же, что и в предыдущем варианте, т. е. 53, 5, 3, 10, так как значением целочисленной переменной a будет код символа 5 — число 53.

При вводе с помощью cin результат зависит от того, как переменная объявлена и что вводим.

Пример 21. Пусть char a, b; cin>>a>>b;

a) При выполнении введём 5 и 3. Тогда с помощью того же cout получим 5, 3, 2, 1. Здесь число 2 получено не как остаток от деления 5 на 3, а как результат операции % для кодов этих символов, т. е. 53 % 51 = 2. Для этих же чисел получено и число 1. В этом можно убедиться, если вместо частного вывести произведение cout << a*b; На экране мы увидим не 15 (5*3), а 2703, т. е. произведение кодов символов 5 и 3 (51* 53 = 2703).

b) Пусть по–прежнему char a, b; cin>>a>>b; При выполнении наберем два символа, например, a и с, коды которых 97 и 99. Тогда по той же причине будет выведено: a, c, 97, 9603, где 97=97%99, а 9603=97*99. “Числа”, которые больше, чем 9, при таком объявлении ввести не сможем. Если введём, например, 123, то a примет значение символа ‘1’, b= ‘2’, а символ 3 игнорируется. Получим 1, 2, 49, 2450, где 49=49 % 50, 2450 = 49*50.

с) Если объявлено int a, b; и вводим целые числа, то значениями этих переменных будут введённые числа. При вводе символов ничего хорошего не получим, хотя программа будет выполняться.





Дата публикования: 2015-02-18; Прочитано: 239 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...