中易网

c语言怎样才能输出中文???(最简单的方法)

答案:5  悬赏:40  
解决时间 2021-01-30 09:51
c语言怎样才能输出中文???(最简单的方法)
最佳答案
C语言中,汉字是用字符串来存储的,因为,汉字是多字节组成(GBK字符集一个汉字占两个字节,UTF8字符集,一个汉字占三个字节),所以,标准C中,只能用字符串来存储汉字数据。
可以采用字符串输入函数来输入中文。
判断中文是不是指定数据,可以用strcmp()函数来进行比较
中文输出,可用printf("%s")来输出相应的数据。
参考代码:
#include
#include
void main()
{
char str[100];
printf("请输入中文: ");
scanf("%s", str );
if ( strcmp(str,"你好")==0 ) //两个字符串相等时,strcmp返回0
{
printf("我很好\n");
}
else
{
printf("你输入的是:%s\n", str );
}
}
运行结果:

请输入中文: 你好
我很好

请输入中文: 中国
你输入的是:中国
全部回答
C语言中的字符串有个很重要的标记就是结束标记 '\0'
在你输入结束之后应该用过程序把字符串最后加上 \0, 这样才不会多输出其他的字符
如果你用scanf("%s",p); 这样得到的字符串应该没有问题
其实很简单,你是用WIN-TC就可以了,在里面加一句代码:
system("graftabl 936");
记住要紧随定义变量之后,不信试试
在C程序中显示汉字
在许多C程序设计中,要用到汉字进行提示或人机交互,而现行的Turbo C集成开发环境不是汉化的,如何编制能显示汉字的C程序呢?
下面的方法可以帮你在西文环境下显示汉字。这种方法是调用中文汉字库进行汉字显示。国家标准规定:汉字库分94个区,每个区有94个汉字(以位作区别),每个汉字在汉字库中有确定的区和位编号,这就是汉字的区位码。每个汉字在库中是以点阵字模形式存储的,一般采用16×16点阵(32字节)、24×24点阵(72字节),每个点用一个二进制位(0或1)表示,对应在屏幕上显示出来,就是相应的汉字。
由于在中文环境下,输入的是汉字的内码,我们必须将之转换成区位码,算出偏移量,从字库中找到对应的汉字,将其字模显示即可。
内码转换成区位码方法如下:
qh=c1-0xa0 wh=c2-0xa0
其区位码就是:
qw=qh*0xff+wh
该汉字在字库中离起点的位置是:
offset=(94*(qh-1)+(wh-1))*32L
程序例:
#include 〈graphics.h〉
#include 〈stdio.h〉
#include 〈fcntl.h〉
#include 〈io.h〉
#include 〈stdlib.h〉
#include 〈conio.h〉
#define ROW 1 //纵坐标放大倍数
#define COL 2 //横坐标放大倍数
void main()
{
int x,y;
char *s=〃汉字显示程序〃;
FILE *fp;
char buffer[32]; //buffer用来存储一个汉字
register m,n,i,j,k;
unsigned char qh,wh;
unsigned long offset;
int gd=DETECT,gm; //图形屏幕初始化
initgraph(&gd,&gm,〃 〃);
if ((fp=fopen(〃hzk16〃,〃rb〃))==NULL)
//打开汉字库,该字库可以在ucdos中找到
{ printf(〃Can't open haz16,Please add it〃);
getch(); closegraph(); exit(0);
}
x=20; y=100; //显示位置设置
while(*s)
{ qh=*(s)-0xa0; //汉字区位码
wh=*(s+1)-0xa0;
offset=(94*(qh-1)+(wh-1))*32L; //计算该汉字在字库中偏移量
fseek(fp,offset,SEEK_SET);
fread(buffer,32,1,fp); //取出汉字32字节的点阵字模存入buffer中(一个汉字)
for (i=0;i〈16;i++) //将32位字节的点阵按位在屏幕上打印出来(1:打印,0:不打印),显示汉字
for(n=0;n〈ROW;n++)
for(j=0;j〈2;j++)
for(k=0;k〈8;k++)
for(m=0;m〈COL;m++)
if (((buffer[i*2+j]〉〉(7-k))&0x1)!=NULL)
putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,GREEN);
s+=2; //因为一个汉字内码占用两个字节,所以s必须加2
x+=30;
}
getch();
closegraph();
}
上述程序在Turbo C 2.0编译系统下运行成功,它可以将汉字放大显示,读者可以将它改成函数用在您的程序中显示汉字。
参考资料:http://www.cqumzh.cn/topic_show.php?tid=28232
虽然我没看见你的程序,我觉得问题出在:你的指针变量(*P)指向的空间是否足够大?
请看我下面的程序:
#include<stdio.h>
int main()
{
char s[101];
while(gets(s),s[0]!='0')
{
puts(s);
}
return 0;
}
只要你输入的不超过50个汉字(每个汉字占2个字节),都能完好输出的
注意:输入0结束
补充回答:
你的错误就在gets和puts的语句啊,应该这样修改:
gets(&(p+i)->name); //////////////去掉后面的[21]
puts(&(p+i)->name); //////////////去掉后面的[21]
你不清楚它们之间的区别吗?把文件简化一下:
char name[21];
gets(name);/////////不能用gets(name[21])
puts(name);/////////不能用puts(name[21])
name表示字符数组的首地址,也可以看成字符串
而name[21]什么都不是,是一种完全错误的写法
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
Excel的求积代码是什么
先行者 近义词
9+3=丨丨8,移动一根火柴使等式成立
三个梵蒂冈
怎么写微博微博消息
锐锋服装怎么去啊,我要去那办事
求魔道祖师所有同人文百度云。谢谢大佬
安琪拉的一套完美连招能秒掉同经济的任何英雄
男孩不能喜欢粉色吗?
清水江治理的困境何在?如何走出治理困境
我的同桌是女生,她说她睡觉以前不能梳头发,
龙岩市如松机电设备有限公司在哪里啊,我有事
金港城是不是骗子医院
上海老中医把脉.
越钓越不会钓了我钓几年了自以为精通台钓调漂
推荐资讯
有一个韩国动画片,里面是一支白熊和一直绿色
描写植物茂盛的句子
卡式港澳通行证当天签证用完可当天马上续签吗
房产所有权与户主的关系
江淮jac货车挂挡很沉
电视剧:征服里面 警察雷丹助手
家里人反对我跟女朋友在一起,怎么办啊?
如何求导数及导数的应用
要落户口,必须要房产证,可是我的房子是按揭
用蚊子、仙鹤、烟写一件趣事 也可以用自己的
山抹微云秦学士,是一首诗吗?还是什么啊?
小水电自供区域如果是不接收供电资产方式是怎
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?