c编译教程中文
在本机上搭建IDE开发环境,在IDE中导入编译器,就可以本地编译了。
把代码在本地写好,编译过之后,运行样例没问题后,再上传的网站上,网站上是有编译器的,你选择之后会自动编译。
❷ 用c语言编译执行时输入英文,结果显示中文是为什么
我认为是代码的问题。
我用的也是vc6,中文绿色版,Win7,64位的系统。从来没出现由于软件不兼容导致程序停止运行的问题。
用该VC6.0编过小程序,也编过一个程序几千行的代码,有出现过某某.exe已停止工作的问题。
从来都是代码的问题。
有可能是读写了非法内存。有可能是控件(比如窗口之类的),信号之类的。
中文版本并不妨事儿,没有中文路径就和英文的一样了。
❸ C中如何处理汉字,请详细给我讲讲啊,急啊!!
以前收藏的一份文档,很不错的:)
学习过C语言的人也许有时会遇到这样一个问题:如何用变量存储汉字以及对这些变量进行操作。目前许多C语言参考书中都没涉及到这个问题,程序中多为处理英文变量和英文字符串,涉及到汉字的情况也大都是在printf语句中输出提示信息或结果,如:
printf("请输入a,b的值:\n");
printf("输出功率为%s千瓦。\n",power);
考虑到还有相当一部分人在学习和应用C语言,因此在这里向读者介绍一下笔者在这方面摸索出来的经验。
存储汉字应该用字符数组,这一点是肯定的,关键问题是汉字在你的计算机系统上占几个字节。多数人会认为一个汉字肯定占两个字节,其实不然。汉字到底占几个字节,这是随系统不同而不同的,而且还依赖于软件环境,如Visual Basic中汉字占一个字节。可以在你的计算机上用strlen()函数测试一下,如:
printf("%d",strlen("计算机"));
若输出为6,则每个汉字占两个字节;若输出12,则每个汉字占四个字节。大多数系统是每个汉字占两个字节的,即上述语句输出值为6。应当注意的是一个全角字符(包括标点符号)同汉字占据相同的字节。本文假定每个汉字占两个字节。
这样你就可以用字符数组存储汉字了,但别忘了,由于C语言中字符串是以'\0'作为结束标记的,系统会自动加上这个标记符,而用strlen()函数测试的返回值不包括这个'\0',因此在定义和初始化字符数组时应当使数组长度最小为实际字符串长再加1,如:
static char name[7]="孙悟空"; /*数组长度为7说明最多可存放3个汉字*/
如果把数组长度定义为6,系统在编译时并不报错,但是当运行程序时有时会莫名其妙地重复输出或多输出汉字,如果出现这种情况,应当首先考虑数组长度是否有问题。当然在定义的同时初始化可以省略数组长度,如:
static char array[]={"中国计算机软件专业技术水平考试"};
同样可以定义二维数组,下面这个二维数组可以存放10个人名:
char member[10][8]; /*10个元素,每个元素中最多能放3个汉字(不是4个!)*/
因为二维数组member[10][8]可以看成特殊的一维数组member[0],member[1],…,member[9],这些一维数组分别表示各行,而一行就表示了一个人名,因此如果想操作每个人名,只需写成member[0],member[1],…而不写成member[0][8],member[1][8],…。
顺便提一下,在C编译窗口中输入汉字需要中文环境。如果读者用的是DOS操作系统,那么就需要安装CCDOS或UCDOS;如果是WIN95/98操作系统,则在DOS命令窗口中运行下面这个批处理文件即可,而不必另外安装中文DOS系统:
C:\WINDOWS>PDOS95
在C编辑窗口中用Ctrl+空格键启动WIN95中文输入法。另外由于C程序是基于DOS的,因此编辑、编译C程序最好在全屏幕状态,否则容易出现问题。
下面给出一个实例程序,它的功能是计算出输入年份的天干地支。
#include "string.h"
main()
{
int a,b,year;
char gz[6]; /*用来表示干支的字符变量*/
/*注意:下面两个语句中{}内的引号和逗号不能为全角字符*/
static char tg[10][3]={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
static char dz[12][3]={"子","丑","寅","卯","辰","巳","午","未","申","酉","戍","亥"};
printf("请输入一个年份:");
scanf("%d",&year);
a=(year-1804)%10; /*以1804年为参考年份,1804年是甲子年*/
b=(year-1804)%12;
strcpy(gz,tg[a]);
strcat(gz,dz[b]);
printf("%d年的干支为:%s\n",year,gz);
}
运行结果:
请输入一个年份:1999
1999年的干支为:己卯
❹ C语言编译原理
编译共分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。
1、预处理阶段:
主要工作是将头文件插入到所写的代码中,生成扩展名为“.i”的文件替换原来的扩展名为“.c”的文件,但是原来的文件仍然保留,只是执行过程中的实际文件发生了改变。(这里所说的替换并不是指原来的文件被删除)
2、汇编阶段:
插入汇编语言程序,将代码翻译成汇编语言。编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言,同时将扩展名为“.i”的文件翻译成扩展名为“.s”的文件。
3、编译阶段:
将汇编语言翻译成机器语言指令,并将指令打包封存成可重定位目标程序的格式,将扩展名为“.s”的文件翻译成扩展名为“.o”的二进制文件。
4、链接阶段:
在示例代码中,改代码文件调用了标准库中printf函数。而printf函数的实际存储位置是一个单独编译的目标文件(编译的结果也是扩展名为“.o”的文件),所以此时主函数调用的时候,需要将该文件(即printf函数所在的编译文件)与hello world文件整合到一起,此时链接器就可以大显神通了,将两个文件合并后生成一个可执行目标文件。
❺ 怎样用c语言编译
C编译的整个过程很复杂,大致可以分为以下四个阶段:
预处理阶段在该阶段主要完成对源代码的预处理工作,主要包括对宏定义指令,头文件包含指令,预定义指令和特殊字符的处理,如对宏定义的替换以及文件头中所包含的文件中预定义代码的替换等,总之这步主要完成一些替换工作,输出是同源文件含义相同但内容不同的文件。
编译、优化阶段编译就是将第一阶段处理得到的文件通过词法语法分析等转换为汇编语言。优化包括对中间代码的优化,如删除公共表达式,循环优化等;和对目标代码的生成进行的优化,如如何充分利用机器的寄存器存放有关变量的值,以减少内存访问次数。
汇编阶段将汇编语言翻译成机器指令。
链接阶段链接阶段的主要工作是将有关的目标文件连接起来,即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的目标文件成为一个能够被操作系统装入执行的统一整体。
❻ C语言怎么编译才能显示中文
主要还是看你的编译器是否支持了。
我用dev-cpp,觉得不错。你试试。
❼ 如何在C语言中输出中文!
在C程序中显示汉字<br>
<br>
<br>
<br>在许多C程序设计中,要用到汉字进行提示或人机交互,而现行的Turbo
C集成开发环境不是汉化的,如何编制能显示汉字的C程序呢?<br>
<br>
下面的方法可以帮你在西文环境下显示汉字。这种方法是调用中文汉字库进行汉字显示。国家标准规定:汉字库分94个区,每个区有94个汉字(以位作区别),每个汉字在汉字库中有确定的区和位编号,这就是汉字的区位码。每个汉字在库中是以点阵字模形式存储的,一般采用16×16点阵(32字节)、24×24点阵(72字节),每个点用一个二进制位(0或1)表示,对应在屏幕上显示出来,就是相应的汉字。<br>
<br>
由于在中文环境下,输入的是汉字的内码,我们必须将之转换成区位码,算出偏移量,从字库中找到对应的汉字,将其字模显示即可。<br>
<br>
内码转换成区位码方法如下:<br>
<br>
qh=c1-0xa0
wh=c2-0xa0<br>
<br>
其区位码就是:<br>
<br>
qw=qh*0xff+wh<br>
<br>
该汉字在字库中离起点的位置是:<br>
<br>
<br>offset=(94*(qh-1)+(wh-1))*32L<br>
<br>
程序例:<br>
<br>
#include
〈graphics.h〉<br>
<br>
#include
〈stdio.h〉<br>
<br>
#include
〈fcntl.h〉<br>
<br>
#include
〈io.h〉<br>
<br>
#include
〈stdlib.h〉<br>
<br>
#include
〈conio.h〉<br>
<br>
#define
ROW
1<br>
//纵坐标放大倍数<br>
<br>
#define
COL
2<br>
//横坐标放大倍数<br>
<br>
void
main()<br>
<br>
{<br>
<br>
int
x,y;<br>
<br>
char
*s=〃汉字显示程序〃;<br>
<br>
FILE
*fp;<br>
<br>
char
buffer[32];<br>//buffer用来存储一个汉字<br>
<br>
register
m,n,i,j,k;<br>
<br>
unsigned
char
qh,wh;<br>
<br>
unsigned
long
offset;<br>
<br>
int
gd=DETECT,gm;<br>//图形屏幕初始化<br>
<br>
initgraph(&gd,&gm,〃
〃);<br>
<br>
if
((fp=fopen(〃hzk16〃,〃rb〃))==NULL)<br>
<br>
//打开汉字库,该字库可以在ucdos中找到<br>
<br>
<br>{
printf(〃Can't
open
haz16,Please
add
it〃);<br>
<br>
getch();
closegraph();
exit(0);<br>
<br>
<br>}
<br>
<br>
x=20;
y=100;
//显示位置设置<br>
<br>
while(*s)<br>
<br>
<br>{
qh=*(s)-0xa0;
//汉字区位码<br>
<br>
<br>wh=*(s+1)-0xa0;<br>
<br>
<br>offset=(94*(qh-1)+(wh-1))*32L;
//计算该汉字在字库中偏移量<br>
<br>
<br>fseek(fp,offset,SEEK_SET);<br>
<br>
<br>fread(buffer,32,1,fp);
//取出汉字32字节的点阵字模存入buffer中(一个汉字)<br>
<br>
<br>for
(i=0;i〈16;i++)
//将32位字节的点阵按位在屏幕上打印出来(1:打印,0:不打印),显示汉字<br>
<br>
for(n=0;n〈ROW;n++)<br>
<br>
for(j=0;j〈2;j++)<br>
<br>
<br>for(k=0;k〈8;k++)<br>
<br>
<br>
for(m=0;m〈COL;m++)<br>
<br>
if
(((buffer[i*2+j]〉〉(7-k))&0x1)!=NULL)<br>
<br>
putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,GREEN);<br>
<br>
s+=2;
//因为一个汉字内码占用两个字节,所以s必须加2<br>
<br>
<br>x+=30;<br>
<br>
}<br>
<br>
getch();<br>
<br>
closegraph();<br>
<br>
}<br>
<br>
上述程序在Turbo
C
2.0编译系统下运行成功,它可以将汉字放大显示,读者可以将它改成函数用在您的程序中显示汉字。
❽ (紧急求助)懂C语言编译的高手进来指点下!本人初学习C语言.没基础.前几天从网上买回一本C++Primer中文版...
中文版的 C++ 大学教程,电子工业出版社,【美】H.M.Deitel 【美】 P.J.Deitel
这本书很适合初学者,大部分学校软院现在都用这本当教材了。以前用的 C++ Primer,它比较适合当第二本来读。