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

rt,在一个程序中我puts()输出中文名字,带但有些有会多出几个不是我输入的字,怎么才能让它输出正确??可能没说清楚,我puts()的括号里是一个指针变量(*P),这个... rt,在一个程序中我puts()输出中文名字,带但有些有会多出几个不是我输入的字,怎么才能让它输出正确??
可能没说清楚,我puts()的括号里是一个指针变量(*P),这个变量是用gets(&p)得到的汉字,但用puts(&p)输出有的就会多几个字出来,有的又是正常的.....我想知道怎样才能输出正常。
我是用的vc2003,2005我也有。
->6楼:你的方法我也试了的,还是一样,我发现要是输入一个汉字的话就不会出问题,我把程序(得到名字的函数)放在下面,你们看看是怎么回事啊。

typedef struct
{
int no;
int ti;
int ip[N];
int c;
char name[21];
}bus;
void getdata(bus a[M])
{
a[0].ti=0;
bus *p;
int m;
p=a;
int n=50101;
for(int i=0;i<M;i++)
{
n=n+i;
a[i].no=n;
a[i].c=rand()%3+3;
m=a[i].c;
for(int j=0;j<m;j++)
{
a[i].ip[j]=rand()%81+50;
a[i].ti=a[i].ti+a[i].ip[j];
}
printf("请输入5010%d车名:",i+1);//这里
gets(&(p+i)->name[21]);
sum=sum+a[i].ti;
}
}
输出用的是:puts(&(p+i)->name[21]);
展开
 我来答
帐号已注销
高粉答主

2021-04-05 · 每个回答都超有意思的
知道大有可为答主
回答量:1.1万
采纳率:97%
帮助的人:322万
展开全部
定义一个字符串变量,在这个变量的值中就可以输入中文了。汉字是多字节的,一个char放不下,可以使用字符数组,但需要给数组分配空间,或者使用string。

例如:

#include<stdio.h>

int main(void)

{

char a[128];

printf("请输入所需输出的汉字:");

scanf("%s",a);

printf("%s\n",a);

return 0;
百度网友575420a
2008-12-08 · TA获得超过249个赞
知道小有建树答主
回答量:82
采纳率:0%
帮助的人:42万
展开全部
在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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星月小木木
推荐于2018-04-12 · TA获得超过3.2万个赞
知道大有可为答主
回答量:2.4万
采纳率:0%
帮助的人:9871万
展开全部
C语言中,汉字是用字符串来存储的,因为,汉字是多字节组成(GBK字符集一个汉字占两个字节,UTF8字符集,一个汉字占三个字节),所以,标准C中,只能用字符串来存储汉字数据。
可以采用字符串输入函数来输入中文。
判断中文是不是指定数据,可以用strcmp()函数来进行比较
中文输出,可用printf("%s")来输出相应的数据。
参考代码:
#include <stdio.h>
#include <string.h>
void main()
{
char str[100];
printf("请输入中文: ");
scanf("%s", str );
if ( strcmp(str,"你好")==0 ) //两个字符串相等时,strcmp返回0
{
printf("我很好\n");
}
else
{
printf("你输入的是:%s\n", str );
}
}
运行结果:

请输入中文: 你好
我很好

请输入中文: 中国
你输入的是:中国
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
戎蕴秋梵Qa
高粉答主

2021-04-07 · 关注我不会让你失望
知道大有可为答主
回答量:5834
采纳率:100%
帮助的人:188万
展开全部
在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; //计
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
职场咨询师小陈

2021-04-12 · TA获得超过1.7万个赞
知道大有可为答主
回答量:9649
采纳率:99%
帮助的人:217万
展开全部
起初,C语言没有官方标准。1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。布莱恩·柯林汉(Brian Kernighan) 和 丹尼斯·里奇(Dennis Ritchie) 出版了一本书,名叫《The C Programming Language》。

这本书被 C语言开发者们称为K&R,很多年来被当作 C语言的非正式的标准说明。人们称这个版本的 C语言为K&R C。

K&R C主要介绍了以下特色:

结构体(struct)类型

长整数(long int)类型

无符号整数(unsigned int)类型

把运算符=+和=-改为+=和-=。因为=+和=-会使得编译器不知道使用者要处理i = -10还是i =- 10,使得处理上产生混淆。

即使在后来ANSI C标准被提出的许多年后,K&R C仍然是许多编译器的最 准要求,许多老旧的编译器仍然运行K&R C的标准。

1970到80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言的很多不同版本。

1983年,美国国家标准协会(ANSI)成立了一个委员会X3J11,来制定 C语言标准。

1989年,美国国家标准协会(ANSI)通过了C语言标准,被称为ANSI X3.159-1989 "Programming Language C"。因为这个标准是1989年通过的,所以一般简称C89标准。有些人也简称ANSI C,因为这个标准是美国国家标准协会(ANSI)发布的。

1990年,国际标准化组织(ISO)和国际电工委员会(IEC)把C89标准定为C语言的国际标准,命名为ISO/IEC 9899:1990 - Programming languages -- C 。

因为此标准是在1990年发布的,所以有些人把简称作C90标准。不过大多数人依然称之为C89标准,因为此标准与ANSI C89标准完全等同。

1994年,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C89标准修订版,名叫ISO/IEC 9899:1990/Cor 1:1994,有些人简称为C94标准。

1995年,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C89标准修订版,名叫ISO/IEC 9899:1990/Amd 1:1995 - C Integrity [7] ,有些人简称为C95标准。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式