今天看着书打了一段程序,显示一张扑克牌,其中问题多多,现记录如下。
首先看看我要显示的效果,如图:
这段程序的代码如下:
#include<stdio.h>
#include<conio2.h>
int main(void)
{
int i,j;
int w=8,h=10,x=30,y=10;//程序已开始就清屏,以消除前一次程序运行留下的效果
textbackground(BLACK);//设置屏幕背景色为黑色
clrscr();//设置文本窗口的背景色为白色,为本边框颜色为红色,再次清屏
textbackground(WHITE);
textcolor(RED); //绘制牌边框
gotoxy(x,y);
putch(0xc9);//输出左上角边框
gotoxy(x+w,y);
putch(0xbb);//输出右上角边框
gotoxy(x,y+h);
putch(0xc8);//输出左下角边框
gotoxy(x+w,y+h);
putch(0xBC);//输出右下角边框
for(i=x+1;i<x+w;i++)
{
gotoxy(i,y);
putch(0xCD);//输出上边框水平线
gotoxy(i,y+h);
putch(0xCD);//输出下边框水平线
}
for(j=y+1;j<y+h;j++)
{
gotoxy(x,j);
putch(0xBA);//输出左边框线
gotoxy(x+w,j);
putch(0xBA);//输出右边框线
}
//设置牌的底色为浅灰色,用浅灰色的■填充牌底
textbackground(LIGHTGRAY);
for(i=x+1;i<x+w;i++)
for(j=y+1;j<y+h;j++)
{
gotoxy(i,j);
putch(0xDB);//输出■填充边框内的区域
}
//设置该牌为红桃3。并在相应位置输出红桃和数字3
textcolor(RED);
gotoxy(x+1,y+1);
putch(0x03);//在左上角输出红桃
gotoxy(x+w-1,y+h-1);
putch(0x03);//在右下角输出红桃
gotoxy(x+w/2,y+h/2);
cprintf("3");
getch();
}
这里的头文件有两个,stdio.h和conio2.h。原本这个程序是在TC2下编译的,我用的是dev c++ 4.9.9.2。dev里的conio.h和TC里的conio.h不一样,TC里面的conio.h支持gotoxy(),textbackground(),cprintf(),textcolor(),clrscr(),putch()这些函数,因此我下了conio-2.0-1mol.DevPak(我已经上传了这个文件),安装后打开dev c++,工具-->编译器选项-->编译器-->在连接器命令加入以下命令,选中并写入"-lconio".
这样我们就能引用conio2.h这个头文件了,就能使用原来在TC里面使用的那些函数了。
第二,putch()输出时由于超过了128个ASCII码,所以就用到了扩展ASCII码,在中文的CMD下无法正常显示,不是因为dev编译器不支持扩展ASCII码,而是中文代码页CodePage不支持扩展ASCII显示。如图:
因此得把CodePage设置成473步骤如下:
1.在CMD上右键选中“默认值”
2.把默认代码页选成437(OEM-美国)
编译运行就OK了。
CodePage的代码可以在控制面板里面的区域和语言选项中查看
下面是ASCII代码表:0~127是标准ASCII码,128后面的都是扩展ASCII码。
ASCII码大致可以分作三部分組成。
第一部分由 00H 到 1FH 共 32 个,一般用来通讯或作为控制之用,有些字符可显示于屏幕,有些则无法显示在屏幕上,但能看到其效果(例如换行字符、归位字符)。
第二部分是由 20H 到 7FH 共 96 个,这 95 个字符是用来表示阿拉伯数字、英文字母大小写和底线、括号等符号,都可以显示在屏幕上。如下表:
第三部分由 80H 到 0FFH 共 128 个字符,一般称为『扩充字符』,这 128 个扩充字符是由 IBM 制定的,并非标准的 ASCII 码。这些字符是用来表示框线、音标和其它欧洲非英语系的字母。
联系客服