1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Bài giảng tin học đại cương C++ (chương 2)

11 286 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 11
Dung lượng 284,72 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

ANSI America National Standards Institut... Sau đó ch ng trình dùng hàm đ hi n th menu... printf normal%s underline %s normal \n\n ,UNDER,NORMAL;printf normal%s reversed %s normal \n\n ,

Trang 1

CH NG 2: BÀN PHÍM VÀ CURSOR

§1 CÁC MÃ PHÍM M R NG

Chúng ta đã th y bàn phím t o các mã thông th ng cho các ch cái, các s và d u ch m câu Các phím này đ u t o mã ASCII dài 1 byte Tuy nhiên có nhI u phím và t h p phím không đ c bi u di n b ng b kí t dài m t byte này ví d nh các phím ch c năng t F1 đ n F10 hay các phím

đi u khi n cursor Các phím này đ c mô t b ng m t mã dài 2 byte Byte

đ u tiên có tr s là 0 và byte th hai là tr s mã c a phím này

1 Nh n bi t các mã m r ng: M t mã m r ng ph i có 2 byte và byte đ u tiên là 0 nên ch ng trình c n ph i đ c 2 byte này Sau đây là đo n ch ng trình nh n bi t các mã m r ng:

Ch ng trình 2 1:

#include <string.h>

main()

{

char key,key1;

clrscr();

while ((key=getche())!= x )

if (key==0)

{

key1=getch();

printf( %3d%3d ,key,key1);

}

else

printf( %3d ,key);

}

Ch ng trình này s hi n th các mã c a các phím đ c gõ cho dù chúng là mã m t byte hay 2 byte Ta dùng hàm getch() đ không hi n th kí

t v a gõ lên màn hình Trong bi u th c ki m tra c a while ch ng trình

đ c mã đ u tiên N u mã này là 0, ch ng trình bi t đó là mã m r ng và

đ c ti p ph n th hai c a mã b ng hàm getch() Sau đó nó hi n th c hai

ph n N u ph n đ u khác không ch ng trình s cho r ng đây không ph i

là mã m r ng và hi n th mã này

Trang 2

2 Đoán nh n mã m r ng: M t cách đoán nh n mã m r ng là dùng phát

bi u switch nh trong ch ng trình sau:

Ch ng trình 2 2 :

main()

{

int key,key1;

clrscr();

while ((key=getche())!= X )

if (key==0)

{

key1=getch();

switch (key1)

{

case 59 : printf( Phim F1 duoc nhan\n );

break;

case 60 : printf( Phim F2 duoc nhan\n );

break;

case 75 : printf( Phim left arrow duoc nhan\n );

break;

default : printf( Phim mo rong khac duoc nhan\n );

break;

}

}

else

printf( %3d ,key);

getch();

}

§2 ĐI U KI N CURSOR VÀ ANSI

1 Khái ni m chung: T p tin ansi.sys cung c p t p đã chu n hoá các mã

đi u khi n cursor ANSI America National Standards Institut Đ b o đ m

s cài đ t c a t p tin ansi.sys trong t p tin config.sys ta đ t dòng l nh:

device = ansi.sys

2 Đi u khi n cursor b ng ansi.sys: Ansi.sys dùng dãy escape đ đi u

khi n con nháy Chu i escape g m nhi u kí t đ c bi t Ansi.sys tìm chu i escape này qua thành ph n c a chu i trong hàm prinft() và gi i mã các l nh theo sau nó Chu i escape luôn luôn gi ng nhau, g m kí t không in đ c

Trang 3

“\x1B”(là mã c a kí t escape) sau đó là d u [ Sau chu i escape có th có

m t hay nhi u kí t Nh chu i này con nháy có th đi lên, xu ng, sang trái , ph i hay đ nh v t i m t v trí nào đó Ví d đ di chuy n con nháy xu ng

d i ta dùng chu i “\x1B[B”

Ch ng trình 2 3: Vi t ch ng trình in m t chu i theo đ ng chéo:

main()

{

clrscr();

printf( Cho mot chuoi tan cung bang dau : );

while (getche()!= )

printf( \x1B[B );

getch();

}

3 Dùng #define và chu i escape: Chu i “\x1B[B” đ c mã hoá và r t khó

đ c Khi dùng các ch ng trình ph c t p nên ghi chú rõ ràng b ng cách dùng d n h ng #define

Ch ng trình 2 4 :

#define c_down \x1B[B

main()

{

while (getche()!= )

printf(c_down);

getch();

}

“[2J” Xoá màn hình và đ a con nháy v home

“[K” Xoáđ n cu i dòng

“[A” Đ a con nháy lên m t dòng

“[B” Đ a con nháy xu ng m t dòng

“[C” Đ a con nháy sang ph i m t c t

“[D” Đ a con nháy sang trái m t c t

“[%d;%df Đ a con nháy đ n v trí nào đó

“[s” C t gi v trí con nháy

“[u” Khôi ph c v trí con nháy

Trang 4

“[%dA” Đ a con nháy lên m t s dòng

“[%dB” Đ a con nháy xu ng m t s dòng

“[%dC” Đ a con nháy sang ph i m t s c t

“[%dD” Đ a con nháy sang trái m t dòng và

nhi u c t

4 Đi u khi n con nháy t bàn phím: Sau đây là ch ng trình cho phép b n

v các hình đ n gi n trên màn hình

Ch ng trình 2 5 :

#define clear \x1B[2J

#define c_left \x1B[D

#define c_right \x1B[C

#define c_up \x1B[A

#define c_down \x1B[B

#define l_arrow 75

#define r_arrow 77

#define u_arrow 72

#define d_arrow 80

#define across 205

#define updown 186

main()

{

int key;

printf(clear);

while ((key=getch())==0)

{

key=getche();

switch (key)

{

case l_arrow : printf(c_left);

putch(across);

break;

case r_arrow : printf(c_right);

putch(across);

break;

case u_arrow : printf(c_up);

putch(updown);

break;

Trang 5

case d_arrow : printf(c_down);

putch(updown);

break;

}

printf(c_left);

}

getch();

}

5 Đ a con nháy đ n v trí b t kì: Chu i escape d ng sau s đ a con nháy

đ n v trí b t kì trên màn hình

S hex 1B c a kí t escape Ngo c vuông

S hi u dòng

S hi u c t

Ch cái f

“ \ x 1 B [ 10 ; 40 f ”

Sau đây là m t ch ng trình ví d v cách dùng chu i đó

Ch ng trình 2 6 :

#define true 1

#define clear \x1B[2J

#define erase \x1B[K

main()

{

int row=1,col=1;

printf(clear);

while(true)

{

printf( \x1B[23;1f );

printf(erase);

printf( Nhap vao so dong va so cot dang(20,40) );

scanf( %d%d ,&row,&col);

printf( \x1B[%d;%df ,row,col);

printf( *(%d,%d) ,row,col);

}

}

§6 TRÌNH BÀY T I CH B T KÌ TRÊN MÀN HÌNH

Trang 6

Sau đây là ch ng trình dùng chu i đ nh v cursor Ch ng trình cung c p hai menu đ nh v d c theo màn hình

Ch ng trình 2 7 :

#define size1 5

#define size2 4

#define clear \x1B[2J

main()

{

static char *menu1[]=

{ Open , Close Save Print Quit };

static char *menu2[]=

{ Cut , Copy , Paste , Reformat };

void display(char *[],int ,int);

printf(clear);

display(menu1,size1,20);

display(menu2,size2,20);

getch();

}

void display(char *arr[],int size,int hpos)

{

int j;

for (j=0;j<size;j++)

{

printf( \x1B[%d ,j+1,hpos);

printf( %s\n ,*(arr+j));

}

}

Trang 7

Các m c cho t ng menu đ c c t gi trong m ng các con tr tr t i chu i Sau đó ch ng trình dùng hàm đ hi n th menu Hàm đ nh v con nháy nh dãy đ nh v ANSI.SYS, l y s hi u dòng t s hi u c a m c trên menu và s hi u c tđ c ch ng trình chính truy n sang

§7 CÁC THU C TÍNH C A KÍ T

M i kí t hi n th trên màn hình đ c c t gi trong hai byte b nh

M t byte là mã thông th ng c a kí t và byte kia là thu c tính c a nó Byte thu c tính n đ nh di n m o c a kí t nh ch p nháy, đ m, g ch d i, đ o màu Ta có th dùng chu i escape c a ANSI đ n đ nh thu c tính c a kí t Theo sau chu i kí t escape và ngo c vuông là con s và ch m Sau đây là danh sách các s t o hi u ng trên màn hình:

2,3,6 màu t i

0 t t thu c tính, th ng là màu tr ng trên n nđen

4 g ch d i

5 ch p nháy

7 đ o màu

8 không th yđ c

Chu i escape có d ng nh sau:

S hex 1B c a kí t escape

S cho bi t ki u thu c tính

“ \ x 1 B [ 10 m”

Chu i này đ c g i trong ti n trình hi n th M i khi b t m t thu c tính, t t

c các kí t s hi n th theo thu c tính m i cho đ n khi nó t t đi Sau đây là

ch ng trình bi u di n các thu c tính c a kí t :

Ch ng trình 2 8 :

#define NORMAL \x1B[Om

#define BOLD \x1B[1m

#define UNDER \x1B[4m

#define BLINK \x1B[5m

#define REVERSE \x1B[7m

main()

{

printf( normal%s blink %s normal \n\n ,BLINK,NORMAL);

printf( normal%s bold %s normal \n\n ,BOLD,NORMAL);

Trang 8

printf( normal%s underline %s normal \n\n ,UNDER,NORMAL);

printf( normal%s reversed %s normal \n\n ,REVERSE,NORMAL);

printf( %s%s reversed and blink %s \n\n ,BLINK,REVERSE,NORMAL); }

§8 MENU

Ta xây d ng m t ch ng trình g m 5 m c menu là Open , Close, Save, Print, Quit Các phím mũi tên lên xu ng s di chuy n v t sáng đ n các

m c c n ch n Phím INS đ ch n và th c hi n công vi c t ng ng M c Quit s k t thúc ch ng trình

Ch ng trình 2 9

#define true 1

#define num 5

#define clear \x1B[2J

#define erase \x1B[K

#define normal \x1B[Om

#define reverse \x1B[7m

#define home \x1B[1;1f

#define bottom \x1B[20:1f

#define u_arro 72

#define color \x1B[4m

/*#define l_arro 75

#define r_arro 77*/

#define d_arro 80

#define insert 83

main()

{

static char *item[num]=

{ Open , Close , Save , Print , Quit };

int curpos;

int code;

void display(char *[],int,int);

int getcode(void);

void action(int);

Trang 9

curpos=0;

while(true)

{

display(item,num,curpos);

code=getcode();

switch (code)

{

case u_arro:if (curpos>0)

curpos;

break;

case d_arro:if (curpos<num 1)

++curpos;

break;

case insert:action(curpos);

break;

}

}

}

void display(char *arr[],int size,int pos)

{

int j;

printf(home);

for (j=0;j<size;j++)

{

if (j==pos)

printf(reverse);

printf( %s\n ,*(arr+1));

printf( %s%5s ,color,*(arr+j));

printf(normal);

printf( %s , );

printf(home);

}

}

int getcode()

{

int key;

while(getch()!=0)

Trang 10

return (getch());

}

void action(int pos)

{

switch(pos)

{

case 0: printf( Open );

break;

case 1: printf( Close );

break;

case 2: printf( Save );

break;

case 3: printf( Print );

break;

case 4: exit();

}

}

§9 GÁN PHÍM CH C NĂNG B NG ANSI

Nh gán chu i vào phím ch c năng ta có th c u hình l i bàn phím đamg dùng D ng th c c a chu i gán phím ch c năng nh sau:

mã escape g m 1xB[

byte th nh t c a mã m r ng cho phím ch c năng

d u ; byte th hai c a mã m r ng cho phím ch c năng

d u ; chu i c n gán

xu ng dòng

\ x 1 B [ 0 ; 68 ; “s” ; 13 p

Ch ng trình 2 10:

main()

{

char str[81];

int key;

clrscr();

Trang 11

printf( Nhap vao mot so cua phim chuc nang : );

gets(str);

key=atoi(str);

printf( Nhap vao mot chuoi de gan phim nay : );

gets(str);

printf( \x1B[0;%d;\ %s\ ;13p ,key+58,str);

}

Ngày đăng: 17/06/2015, 14:09

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w