懂C语言的帮忙看看这个汉字显示代码的错误在哪,谢了

#include <Conio.h>
#include <graphics.h>
#define closegr closegraphvoid initgr(void) /* BGI初始化 */
{
int gd=DETECT, gm=0; /* 和gd=VGA,gm=VGAHI是同样效果 */ registerbgidriver(EGAVGA_driver); /* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd, &gm, "");
}
void drawmat(char *mat,int matsize,int x,int y,int color)/*依次:字模指针点阵大小起始坐标(x,y)、颜色*/
{
int i,j,k,n;
n=(matsize-1)/8+1;
for(j=0;j<matsize;j++)
for(i=0;i<n;i++)
for(k=0;k<8;k++)
if(mat[j*n+i]&(0x80>>k)) /*测试为1的位则显示*/ putpixel(x+i*8+k,y+j,color);
}
char zi24[]={ /* 以下是 '字' 的 24点阵隶书 字模72byte*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x08,0x1C,0x10,0x1F,0xFF,0xF0,0x18,0x00,0x30,0x18,0xFF,0x10,0x09,0xC3,0x90,0x00,0x3C,0x00,0x00,0x1C,0x00,0x3F,0xFF,0xFE,0x7E,0x0C,0xFE,0x00,0x1C,0x04,0x00,0x1C,0x00,0x04,0x3C,0x00,0x03,0xF8,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}
char mo24[]={ /* 以下是 '模' 的 24点阵楷体_GB2312 字模,72 byte*/
0x00,0x00,0x00,0x00,0x00,0x60,0x02,0x00,0x30,0x03,0x0C,0x20,0x03,0x04,0x3C,0x02,0x07,0xE0,0x02,0x1C,0x40,0x02,0x00,0x40,0x03,0xC0,0x70,0x7E,0x1F,0x98,0x02,0x08,0x10,0x06,0x0F,0x90,0x07,0x88,0x10,0x0A,0xCB,0xE0,0x1A,0x05,0x00,0x12,0x01,0x1E,0x22,0x0F,0xFE,0x42,0x32,0x80,0x02,0x02,0x40,0x02,0x04,0x60,0x02,0x0C,0x30,0x02,0x18,0x1C,0x02,0x20,0x0F,0x02,0x00,0x00,
}
}
int main(void)
{
int i,j;
initgr(); /* BGI初始化 */
drawmat(yi12,12,100,125,WHITE);
drawmat(er12,12,115,125,WHITE);
drawmat(dian12,12,130,125,WHITE);
drawmat(zhen12,12,145,125,WHITE);
drawmat(song16,16,160,123,YELLOW);
drawmat(ti16,16,180,123,YELLOW);
drawmat(zi24, 24, 200, 119, CYAN);
drawmat(mo24, 24, 230, 117, GREEN);
drawmat(guan48, 48, 350, 110, RED);
drawmat(guan64, 64, 410, 100, YELLOW);
for(i=0;i<15;i++)
drawmat(matarray16k+i*32,16,200+i*15,200,WHITE);
drawmat(matarray16k+8*32,16,200+i*15,200,WHITE);
drawmat(matarray16k+9*32,16,200+(++i)*15,200,WHITE);
drawmat(matarray16k+10*32,16,200+(++i)*15,200,WHITE);
for(i=18;i<25;i++)
drawmat(matarray16k+(i-3)*32,16,200+i*15,200,WHITE); getch(); /* 暂停一下,看看前面绘图代码的运行结果 */ closegr(); /* 恢复TEXT屏幕模式 */
return 0;
}
错在哪,怎么改麻烦详细点说说

这个是你没有理解字模和函数的意思。

void drawmat(char *mat,int matsize,int x,int y,int color)这个函数要和char zi24[]={  /* 以下是 '字' 的 24点阵隶书 字模72byte*/

搭配着用。

也就是说,你要用字模转换工具把汉字转化成 char **88[]。然后在把这个放在函数里。

你看你的

drawmat(yi12,12,100,125,WHITE); 

yi12是没有定义的。

而你看示例程序

char zi24[]={                                        /* 以下是 '字' 的 24点阵隶书 字模72byte*/

char mo24[]={                                         /* 以下是 '模' 的 24点阵楷体_GB2312 字模

定义了“字”“模”两个字。

所以函数drawmat(zi24,24,100,125,white)就是正确的。

-----------------------------------------------------------------

这样说可能你不是很明白,你可以参考一段我写的程序,下面是链接:

http://blog.csdn.net/gracefulphoenix/archive/2010/08/08/5796295.aspx

-------------------------------------------------------------------

另外字模转换工具在win-tc下就有。如图。

在超级工具集里面。

如果还有问题,可以在我的博客下留言。本人非大牛,但是可以一起讨论。 

----------------------------------------------------------------------

如果你还不明白的,可以看一下这个程序,然后对比一下你的程序。就知道了。

*************************************************************

#include "Conio.h"

#include "graphics.h"

#define closegr closegraph

void initgr(void) /* BGI初始化 */

{

  int gd = DETECT, gm = 0; /* 和gd=VGA,gm=VGAHI是同样效果 */

  registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */

  initgraph(&gd, &gm, "");

}

void drawmat(char *mat,int matsize,int x,int y,int color)

/*依次:字模指针、点阵大小、起始坐标(x,y)、颜色*/

{

  int i, j, k, n;

  n = (matsize - 1) / 8 + 1;

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

    for(i = 0; i < n; i++)

      for(k = 0;k < 8; k++)

        if(mat[j * n + i] & (0x80 >> k))  /*测试为1的位则显示*/

          putpixel(x + i * 8 + k, y + j, color);

}

char yang12S[]={

/* 以下是 '阳' 的 12点阵宋体 字模,24 byte */

  0xF7,0xC0,0x94,0x40,0x94,0x40,0xA4,0x40,

  0xA7,0xC0,0x94,0x40,0x94,0x40,0xF4,0x40,

  0x84,0x40,0x87,0xC0,0x84,0x40,0x00,0x00,

};

char guang12S[]={

/* 以下是 '光' 的 12点阵宋体 字模,24 byte */

  0x04,0x00,0x44,0x40,0x24,0x80,0x15,0x00,

  0xFF,0xE0,0x12,0x00,0x12,0x00,0x12,0x00,

  0x12,0x20,0x22,0x20,0xC1,0xE0,0x00,0x00,

};

int main(void)

{

  int i, j;

  initgr(); /* BGI初始化 */

  setcolor(10);

  /*我定义的是"阳光"两个字,所以,要在主函数前,把阳光这两个字的字模计算出来。在上面,看到了吗。*/

  drawmat(yang12S,12,100,100,10);/*就是“阳”*/

  drawmat(guang12S,12,200,200,10);/*就是"光"*/

  getch(); /* 暂停一下,看看前面绘图代码的运行结果 */

  closegr(); /* 恢复TEXT屏幕模式 */

  return 0;

}

*****************************************************************

温馨提示:答案为网友推荐,仅供参考
相似回答