社区
C语言
帖子详情
怎么读取汉字库里的字,并显示?
ztwz
2004-10-06 12:53:04
怎么样自己定义一个小形汉字库,然后在程序中调用字库里的汉字?
...全文
273
9
打赏
收藏
怎么读取汉字库里的字,并显示?
怎么样自己定义一个小形汉字库,然后在程序中调用字库里的汉字?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
complexity
2004-10-06
打赏
举报
回复
哇,都这个年代了,还有这么多DOS的遗老遗少
中国的计算机教育真成问题了
ztwz
2004-10-06
打赏
举报
回复
不是,这是用C写的一个留言簿,功能和手机的差不多,但是在TC里不能显示汉字,要加个汉字库,请问要怎么添加汉字库来显示汉字?
lukexu
2004-10-06
打赏
举报
回复
是手机??
ztwz
2004-10-06
打赏
举报
回复
谢谢: zgy166(昆深)
但我想要的不是这样的,比如下面的代码要怎么调用字模来显示汉字?
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
typedef struct phone /*电话本结构*/
{
char name[20];
char phones[30];
char address[40];
struct phone *next;
}phone_info;
f_show(phone_info *ph) /*显示所有记录*/
{
phone_info *p;
int page=1;
p=ph->next;
if(p==NULL)
printf("数据库为空!\n");
while(p)
{
printf("\n名字:%s",p->name);
printf("\n电话:%s",p->phones);
printf("\n地址:%s",p->address);
printf("\n---------------------------------------------------------");
p=p->next;
if(page%6==0)
getch();
page++;
}
getch();
}
f_add(phone_info *ph) /*添加信息*/
{
phone_info *p,*q;
q=ph->next;
p=(phone_info *)malloc(sizeof(phone_info));
printf("请输入要添加入的信息!\n");
printf("\n名字:");
scanf("%s",&p->name);
printf("\n电话:");
scanf("%s",&p->phones);
printf("\n地址:");
scanf("%s",&p->address);
if(q==NULL)
{
ph->next=p;
p->next=q;
}
p->next=q;
ph->next=p;
}
f_del(phone_info *ph) /*删除信息*/
{
phone_info *p,*q;
char name[20];
p=q=ph->next;
printf("请输入要删除人的名字:");
scanf("%s",name);
if(strcmp(name,p->name)==0)
{
ph->next=p->next;
p=p->next;
printf("数据删除成功!\n");
getch();
return;
}
while(p->next!=NULL)
{
p=p->next;
if(strcmp(name,p->name)==0)
{
q->next=p->next;
p=p->next;
printf("数据删除成功!\n");
getch();
}
q=p;
}
if((strcmp(name,p->name)==0)&&(p->next==NULL))
{
q=p->next;
p=q;
printf("数据删除成功!\n");
getch();
return;
}
else
{
printf("查无此人\n");
getch();
return;
}
}
f_menu(phone_info *p) /*菜单*/
{
int menu;
clrscr();
printf("\t************************************************************\n");
printf("\t***** 1--显示所有记录 *****\n");
printf("\t***** 2--添加一条记录 *****\n");
printf("\t***** 3--删除一条记录 *****\n");
printf("\t***** 4--修改一条记录 *****\n");
printf("\t***** 5--保存 *****\n");
printf("\t***** 6--退出程序 *****\n");
printf("\t************************************************************\n");
printf("\t请输入数字(1-6):");
scanf("%d",&menu);
switch(menu)
{
case 1 : f_show(p); break;
case 2 : f_add(p); break;
case 3 : f_del(p); break;
case 4 : f_edit(p); break;
case 5 : f_seve(p); break;
case 6 : return 0; break;
default :
{
printf("\n输入错误!\n");
getch();
return 0;
}
}
}
f_all_file(phone_info *ph) /*提取文本信息*/
{
FILE *fp;
int i;
phone_info *p,*q;
char ch,c;
i=0;
q=ph;
fp=fopen("data.txt", "rt");
if(fp==NULL)
{
printf("打开数据库失败!\n按任意键退出!");
getch();
exit(1);
}
ch=fgetc(fp);
if((ch==EOF)||(ch=='#'))
{
printf("数据库为空!\n");
}
while(ch!='#')
{
p=(phone_info *)malloc(sizeof(phone_info));
fscanf(fp,"%c\n%s\n%s\n%s\n",&c,&p->name,&p->phones,&p->address);
q->next=p;
i++;
q=p;
ch=fgetc(fp);
}
q->next=NULL;
printf("共有 %d 信息!\n",i);
getch();
return;
}
f_seve(phone_info *ph) /*保存记录*/
{
phone_info *p;
FILE *fp;
char ch;
p=ph->next;
fp=fopen("data.txt","wt");
if(fp==NULL)
{
printf("数据库为空\n");
fputc('#',fp);
fclose(fp);
getch();
return;
}
printf("请等待.........\n");
while(p)
{
fputc('*',fp);
fprintf(fp,"%c\n%s\n%s\n%s\n",ch,p->name,p->phones,p->address);
p=p->next;
}
fputc('#',fp);
fclose(fp);
printf("保存成功!\n");
getch();
}
f_edit(phone_info *ph) /*修改资料*/
{
phone_info *p,*q;
char name[20];
int ok=0;
p=q=ph->next;
printf("请输入要修改人的名字:");
scanf("%s",name);
while(p)
{
if(strcmp(name,p->name)==0)
{
printf("查找到用户:%s\n更新记录...\n",p->name);
printf("名字:");scanf("%s",&p->name);
printf("电话:");scanf("%s",&p->phones);
printf("地址:");scanf("%s",&p->address);
ok=1;
}
q=p;
p=p->next;
}
if(ok==0)
printf("查无此人!\n");
getch();
}
main() /*主函数*/
{
int ok=1;
phone_info *p;
p=(phone_info *)malloc(sizeof(phone_info));
f_all_file(p);
while(ok)
{
ok=f_menu(p);
}
free(p);
}
谢谢
zgy166
2004-10-06
打赏
举报
回复
或者:
int handle;
int openzk(void)
{
handle=open("c:\\ucdos\\hzk16",O_RDONLY|O_BINARY);
if(handle==-1)
{
outtext("error on open file");
exit(1);
}
return handle;
}
int putz16(int x1,int y1,int z,int color,int m,int n,char *p)
{
long wz;
unsigned int i,f=0,c1,c2;
int i1,i2,i3,i4,i5,rec;
char by[32];
while((i=*p++)!=0)
{
if(i>0xa1)
if(f==0)
{
c1=(i-0xa1)&0x07f;
f=1;
}
else
{
c2=(i-0xa1)&0x07f;
f=0;
rec=c1*94+c2;
wz=rec*32L;
lseek(handle,wz,SEEK_SET);
read(handle,by,32);
for(i1=0;i1<16*m;i1=i1+m)
for(i4=0;i4<m;i4++)
for(i2=0;i2<2;i2++)
for(i3=0;i3<8;i3++)
if(getbit(by[i1/m*2+i2],7-i3))
for(i5=0;i5<n;i5++)
putpixel(x1+i2*8*n+i3*n+i5,y1+i1+i4,color);
x1=x1+16*m+z;
}
}
return(x1);
}
zgy166
2004-10-06
打赏
举报
回复
#include<stdio.h>
#include<graphics.h>
/* x,y为显示坐标,s为显示字符串,colour为颜色 */
void hanzi16(int x,int y,char *s,int colour)
{
FILE *fp;
char buffer[32]; /* 32字节的字模缓冲区 */
register i,j,k;
unsigned char qh,wh;
unsigned long location;
if((fp=fopen("hzk16","rb"))==NULL)
{
printf("Can't open hzk16!");
getch();
exit(0);
}
while(*s)
{
qh=*s-0xa0;
wh=*(s+1)-0xa0;
location=(94*(qh-1)+(wh-1))*32L; /* 计算汉字字模在文件中的位置 */
fseek(fp,location,SEEK_SET);
fread(buffer,32,1,fp);
for(i=0;i<16;i++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
if(((buffer[i*2+j]>>(7-k))&0x1)!=NULL)
putpixel(x+8*j+k,y+i,colour);
s+=2;
x+=16; /* 汉字间距 */
}
fclose(fp);
}
main()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
hanzi16(246,200,"疯狂甲虫乐园!",BROWN);
getch();
closegraph();
}
ztwz
2004-10-06
打赏
举报
回复
..............我没装的有linux系统!
complexity(土土):那么最简单的做法是把汉字库字模自动生成一个.h文件,把字库编译在可执行程序里面。
你说的这个要怎么做?给个小例子行吗?谢谢
xunavy
2004-10-06
打赏
举报
回复
学linux可以吗
complexity
2004-10-06
打赏
举报
回复
如果你是在dos下努力干这件事,还是算了吧,放弃dos,赶紧学习Windows会节省你很多精力。
如果你是在做嵌入式系统,那么最简单的做法是把汉字库字模自动生成一个.h文件,把字库编译在可执行程序里面。
单独的字库格式是这样:对于16点阵字库,每个汉字占32个字节,每个字节包含8个点,按从上到下,左右顺序排列。字模在字库中的索引是通过机内码计算得到的,具体公式可以在网上搜到。
STM32下UC/GUI实现从片外FLASH
读取
字
库文件
现在的UC/GUI的源程序只能实现部分英文
字
库,但我们中国人开发项目常常要用中国
字
,网上关于实现汉
字
的方法的文章太多了,随便可以找到,但是那都是将少量的
字
库文件存放在片内的FLASH,一旦在不确定汉
字
使用范围的...
无线移动网络通信控制系统
LED点阵
显示
屏控制部分首先将该ASCII码转化为相应的十六进制数,然后将该十六进制数与32相乘,所得数据即为待
显示
字
在
字
模库
里
所对应
字
模的首地址),把该
字
的
字
模数据
读取
出来,然后通过
显示
程序把对应的数据送给...
易语言-MDB数据库存储图片并浏览
然后,我们需要写一个函数来将图片文件
读取
为二进制数据并存入数据库: ```易语言 .打开数据库 数据库名("ImageDatabase.mdb") .打开表 "ImageTable" .文件到二进制 图片路径, 图片数据 .插入记录 图片ID, 图片...
汉
字
取模
读取
并
显示
目录一、概述二、什么是点阵1、8×8点阵原理图2、8×8点阵实物图三、汉
字
编码1、区位码2、机内码3、对于16×16点阵
字
库4、对于14×14与12×12点阵...OpenCV
显示
图片并打印汉
字
1、实验要求2、实验进行前的准备3、代码编写...
汉
字
在屏幕上的
显示
过程以及乱码的原因
一、汉
字
在计算机中的
显示
过程 要想在计算机的
显示
器上
显示
文
字
,首先你得写一个程序,这个程序有一个功能就是把文
字
的编码和
显示
信息发给显卡,
显示
信息包括在这个屏幕上的输出位置、
字
的大小等等。然后显卡就知道...
C语言
70,024
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章