§ 8. Сімвальныя велічыні
Для захоўвання значэння аднаго сімвала ў мове С++ выкарыстоўваецца тып char. Велічыня дадзенага тыпу займае ў памяці камп’ютара 1 байт. Значэннем велічыні можа быць любы сімвал кодавай табліцы ASCII [1], якая прыведзена ў дадатку да главы 1 (гл. Дадатак да главы 1). У табліцы кожны знак мае свой нумар. Сімвалы з нумарамі 0—32 з’яўляюцца службовымі, і не ўсе з іх маюць візуальнае адлюстраванне. Напрыклад, сімвал з нумарам 9 — сімвал, які адпавядае націсканню клавішы Tab, сімвал з нумарам 13 адпавядае націсканню клавішы Enter. Сімвал з нумарам 32 адпавядае прабелу, ён таксама не бачны на экране. Пераменнай тыпу char можна прысвоіць значэнне сімвала, пры гэтым сам сімвал ставіцца ў адзінарнае двукоссе. Таксама пераменнай тыпу char можна прысвоіць лікавае значэнне. Гэта значэнне — код сімвала ў табліцы. Калі прысвоіць пераменнай тыпу int значэнне пераменнай тыпу char, то будзе прысвоены кодавы нумар. Сімвалы можна ўводзіць і выводзіць гэтак жа, як лікі (прыклад 8.1). Сімвалы можна параўноўваць, пры гэтым будуць параўноўвацца іх коды. Гэта азначае, што большы той сімвал, у якога код большы (прыклад 8.2). Пры рабоце з кансоллю карэктна апрацоўваюцца толькі сімвалы з першай часткі кодавай табліцы, г. зн. сімвалы з кодавымі нумарамі ад 0 да 127. У другой частцы кодавай табліцы знаходзяцца рускія літары, якія, як вы ўжо бачылі раней, выводзяцца некарэктна. Каманда setlocale дазваляе вырашыць праблему з карэктным вывадам рускіх літар, але не з уводам. Прыклад 8.3. Вывесці на экран кодавую табліцу ASCII (пачынаючы з сімвала з кодам 32). Этапы выканання задання I. Вынік не залежыць ад зыходных даных. II. Вынік: табліца сімвалаў. III. Алгарытм рашэння задачы. 1. У цыкле ад 32 да 255 перабіраем значэнне кода сімвала. IV. Выкарыстоўваецца лакальная пераменная i тыпу int у цыкле і c — char. З выніку работы праграмы прыкладу 8.3 бачна, што рускія літары ўсё ж прысутнічаюць у кодавай табліцы. Ведаючы коды гэтых сімвалаў, можна арганізаваць увод і вывад рускіх літар, напісаўшы адпаведныя функцыі пераўтварэння. Аднак гэта не вельмі зручна. Для магчымасці ўводу і вываду рускіх літар можна выкарыстаць каманды з бібліятэкі windows.h. Уводам сімвалаў кіруе каманда SetConsoleCP(1251), а каманда SetConsoleOutputCP(1251) кіруе вывадам (прыклад 8.4). Гэтыя каманды дазваляюць выкарыстоўваць на кансолі кодавую табліцу Windows 1251 (стандартная 8-бітная кадзіроўка для рускамоўных версій Microsoft Windows) замест вызначанай па змоўчанні табліцы ASCII. Табліца Windows 1251 выкарыстоўваецца і ў рэдактары кода сістэмы праграміравання Code::Bloks (прыклад 8.5). У C++ ёсць магчымасць выводзіць кіруючыя сімвалы. Яны пачынаюцца з сімвала «\» (адваротнага слэша, бэкслэша), за якім ідзе пэўная літара або лічба. Найбольш распаўсюджаныя — '\n' (перавод радка) і '\t' (табуляцыя) (прыклад 8.6). Іншыя сімвалы можна паглядзець у Дадатку да главы 1. І '\n', і endl абодва пераводзяць курсор на натсупны радок. У чым паміж імі розніца? Пры выкарыстанні cout даныя для вываду могуць змяшчацца ў буфер даных [2], г. зн. cout можа не накіроўваць даныя адразу ж на вывад. Замест гэтага ён можа пакінуць іх пры сабе на некаторы час. Выкарыстанне endl гарантуе, што ўсе даныя з буфера будуць выведзены, перад тым як працягнуць. Выкарыстанне endl можа выклікаць зніжэнне прадукцыйнасці, асабліва калі запіс на ўстройства адбываецца павольна (напрыклад, запіс даных у файл).[1] ASCII — от англ. American Standard Code for Information Interchange. С кодовыми таблицами вы познакомитесь позднее. [2] Буфер данных — специальная область памяти, используемая для ввода/вывода, в котором накапливаются данные до тех пор, пока не будет нажата клавиша Enter или буфер не заполнится полностью. После этого накопленный блок данных становится доступным программе. |
Тып даных char з’яўляецца знакавым тыпам і можа захоўваць лікавыя значэнні ад –128 да 127. Для работы з сімваламі выкарыстоўваюць дыяпазон 0..127. Паколькі тып char захоўвае лік, то ў дачыненні да яго можа быць выкарыстаны мадыфікатар unsigned. У гэтым выпадку дыяпазон лікавых значэнняў ад 0 да 255. Прыклад 8.1. Дзеянні з сімвальнымі велічынямі.
Тэсціраванне: Прыклад 8.2. Параўнанне сімвалаў.
Тэсціраванне: Прыклад 8.3. V. Праграма:
VI. Тэсціраванне: Прыклад 8.4. Вывад пяці рускіх літар, размешчаных у табліцы пасля ўведзенай літары. Праграма:
Тэсціраванне: Прыклад 8.5. Радок стану. Прыклад 8.6. Выкарыстанне кіруючых сімвалаў (на прыкладзе праграмы з прыкладу 8.4). Праграма:
Тэсціраванне: Звярніце ўвагу, што ў кодавай табліцы ASCII паміж літарамі «п» і «р» знаходзяцца сімвалы псеўдаграфікі, якіх няма ў кодавай табліцы Windows 1251. |