goto语句的得失

文章来源:http://carlone0yu.bokee.com/ 自从计算机科学一代宗师Dijkstra于1968年发表了著名的文章《Go To Statement Considered Harmful》之后,goto语句就成了过街老鼠,人人喊打。甚至有人开玩笑说:"今天你敢用goto,明天老板就让你go home"。 "不要在程序中使用goto"已经成为绝大多数开发者的圣经,但却很少有人认真的思考过,为什么会这样? goto问题之所以这么臭名昭著,从历史的角度来看,在Dijkstra在ACM发表那篇文章之前,现代软件构造方法还没有出现,goto语句是当时实现流程控...
推荐文章 | 2007-09-24 07:58 | 阅读 2447 次 | 评论 0 条

让bioskey()来捕获键盘按键消息.

大家在初学编程的时侯,有没有作过这样的尝试:用scanf()函数来获得方向键和一些控制键的ASCII的值.比如:scanf("%c",&ch);运行的时时侯,不论怎么按那些方向键和控制键,都没有什么反应.这是什么原因.大家可以想一下,%c是用来获取字符的输入,而这些方向键和控制键并不是ASCII的字符输入键.哦,原来是这样.那么怎样才能捕获这些不是字符输入键呢.首先,我们知道不能再用只捕获字符信息的方法来捕获这些键.那么,在C语言中有没有提供其它的捕获按键信息的函数.当然,C语言提供了这样的函数.它就是bioskey().由于函数名的字面意思可知"基本输入输出系统键".那么,bi...

紧凑地使用内存,从位域开始.

*/ --------------------------------------------------------------------------------------*/ 出自: 快乐编程 http://hi.bccn.net/108519*/ 作者: neverTheSame E-mail:zhaoxufeng9997@126.com QQ:475818502*/ 时间: 2008-6-1*/ 声明: 尊重作者劳动,转载请保留本段文字*/ -----------------------------------------------------------------...

窗口界面设计C源代码

这是我在学C图形编程做一个程序.虽然和WINDOWS2000的窗口设计有 一点差距,但窗口感觉还是不错的.希望看了之后,对大家的视窗化设计有所帮助. 由于这是刚学编程的时侯编写的,源代码的注释不是很多,模块设计也不是很好. 但还有是参考价值的. 源代码首次发布在编程中国的『 C语言论坛 』 → 『 C图形专区 』. 下载源代码: http://bbs.bc-cn.net/dispbbs.asp?boardID=225&ID=105210&page=1

俄罗斯方块C源代码

http://bbs.bc-cn.net/dispbbs.asp?BoardID=225&ID=106689&star=at# 这是我大约是一年前的作品.本想要修改一下,让更多的人可以很好地解读. 由于手上一个程序一直没有完成,没有去润色它.希望有时间的时侯能修改一下. 再重新发布. 源代码首次发布在编程中国『 C语言论坛 』 → 『 C图形专区 』,大家可以去查阅.

拒绝全局变量与局部变量同名

拒绝全局变量与局部变量同名大家都知道全局变量的作用范围是从声明开始到文件结束,而局部变量的作用范围一般是在函数内从声明开始到函数结束.当函数内的局部变量与全局变量同名时,以局部变量为准.也就是说,全局变量在函数内部不产生任何影响.换一种说,就是当局部变量与全局变量同名的函数内部就不能引用全局变量,也就是函数内不能用到全局变量.这是很致命的.当函数需要获得或者修改这个全局变量的值时,这样会使得程序无法做到.因此,我们必须注意到这方面的问题,不要以为是小事.我在这里就介绍一下我个人的来预防全局变量与局部变量同名方法:你可以这样做,也就是这样规定:全局变量一定以下划线开始,如_全局变量名;而局...

自定义类型画线

大家都知道C语言图形编程一共提供了4种类型的线型.大家可以在下面的枚举型定义里看出.enum line_styles {SOLID_LINE = 0,DOTTED_LINE = 1,CENTER_LINE = 2,DASHED_LINE = 3,USERBIT_LINE = 4,};显然,这四种线型对我们开发比较大的程序是不够的.因此,C语言图形编程提供了一种自定义线型的方法.这就方便我们开发出具有自身特色的图形.废话少说,我们就开始介绍怎么自定义线型吧.大家都知道,C语言中提供了一个能设置线型的函数setlinestyle().它的原型声明:void far _Cdecl s...

在C语言中实现汉字显示

在我推荐的文章中对汉字的编码作了详尽的介绍,在此就不多说了.对汉字在计算机中的编码了解之后,我们应该怎样编写汉字显示程序呢.既然汉字是以字模的形式保存的,那么我们就应该获得汉字在汉字库中的字模储存位置.我们可以用以下方式来得到字模的储存位置:字模首地址=((机内码低字节+95)×94+(机内码高字节+95))×N注:N为一个汉字点阵字模的字节数。得到了字模数据之后,再对每个字节的位进行判断,如果位为1,用putpixel()在相就的点上画上一点,如果位上为0,则不作画点操作.知道了原理之后,开始编程就OK了.以下是我个人编写好的汉字显示程序,希望对大家有参考作用. 对12X12点阵的汉...

点阵汉字显示原理

文章来源[中国自学编程网] 发布日期:2007-7-26 16:18:10 汉字内码   在电脑中,所有的数据都是以0和1保存的,按不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。 汉字字模  得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的...
推荐文章 | 2007-09-07 07:44 | 阅读 1704 次 | 评论 0 条

在C语言怎样对数据和操作的封装

*/ --------------------------------------------------------------------------------------*/ 出自: 快乐编程 http://hi.bccn.net/108519*/ 作者: neverTheSame E-mail:zhaoxufeng9997@126.com QQ:475818502*/ 时间: 2008-6-1*/ 声明: 尊重作者劳动,转载请保留本段文字*/ -----------------------------------------------------------------...

谨慎使用setviewport()

在讲解之前,我得介绍一下setviewport()函数的用途.它功能就设置视区.视区分两种:一,不可视视区,使用方法setviewport(left,top,right,bottom,1); 二,可视视区,使用方法setviewport(left,top,right,bottom,0).这两种视区有没有什么区别.不可视区: 当作图超出了视区图形被剪切,如下一段程序:...setviewport(50,50,100,100,1);setfillstyle(1,4);bar(20,20,300,300);/*这里的(20,20)是相对于(50,50)为(0,0).也就是说(50,...

拒绝使用setbkcolor()函数

不知道大家在TC图形编程的时侯有没有发现这样的一个问题.当使用使用前景颜色的时侯,发现可用的颜色是15种而不是16种.在graphics.h头文件中,有enum COLORS()中有16种颜色的枚举类型.第0个是BLACK.但是有时,我们在将BLACK为前景颜色使用时,并没有出黑色的前景.这是什么原因呢.你有没有感觉到:当setcolor(0)做前景色时,所作出的图的颜色和背景色是一样的.例如下面的一段程序:...setbkcolor(15);cleardevice();setcolor(0);/*以黑色为前景色,输出一些字符串*/settextstyle(2,0,5);moveto(0...

"Out of memory in function ..." 解决之道

出现这种原因:超出了TC2.0 能编译文件的最大容量.可以在这里看到编译的最大容量:Compile--->Get info╔═════════════ Information ║ ║║ Current directory : D:\TURBOC2 ║║ Current file : D:\TURBOC2\NONAME.C ║║ File size ...

包含库头文件需要注意的事项

今天,就给大家说一说使用头文件得注意的地方.费话少说,就给大家一个例子吧:#include<stdio.h>#define BUFSIZ 128int main(void){return 0;}编译一下,给现了一个警告: Compiling D:\TURBOC2\NONAME.C: Warning D:\TURBOC2\NONAME.C 2: Redefinition of 'BUFSIZ' is not identical哦,原来是在stdio.h头文件中也宏定义了BUFSIZ.因此,我们在使用宏时,不能和头文件中定义的宏相同.这点值得大家注意. 还有头文件中的函数也得注意,我们选用...

scanf()与标准输入

现在,给大家说一说使用scanf()函数的一些值得注意的地方.不知大家有没有在编程的时侯,使用了scanf()函数后会出现一些异常情况.大家有没有注意到要结束scanf()函数的输入一定要按回车键.是的,原因就是出现在这个地方.它的作用就是从输入流提取数据.输入流的指针在stdio.h文件中有宏定义#define stdin (&amp;_streams[0]) .也就是scanf()函数相当于:fscanf(stdin,...).例如scanf("%d",&amp;i); 相当于fscanf(stdin,"%d",&amp;i); .所以,当输入流中有数据时,scanf()就从中提...

使用sizeof()为你的程序有更好的兼容性

由经验七,不难得出另一个值得我们注意的问题:不要以为我们经常指针类型的长度是2个字节,那在就任何时候也都是2个字节.这是一种定性思维.作为一个合格的程序员应该养成一个好的习惯,一个不把往常接触到的情况看成现在也是这样的情况的习惯.有时编译模式有变,有时编译器的不同也会有所不同.如在TC2.0下整型变量长度为2个字节而在VC++6.0中是4个字节.那么有没有一种方法,可以在不同编译模式或不同编译器的通用的方法呢.只要大家想一下,就有了.大家还记得,我们在前面的经验介绍中用到了sizeof()这个函数.它的作用测定变量或某一类型的长度.当我要用为一个指向字符类型的指针申请能存放10个字符的内...

#define NULL 0 使用的好坏

在TC2.0下编程,不要为了省麻烦,在程序的开头以#define NULL 0 来代替#include<stdio.h>.我不是说这种方法不好,反而我认为用到非常妙,因为在程序中可以减少不必要的外部函数的连接,从而减少程序的负担.但是,用#define NULL 0也得有下前提,就是编译器的模式(Model)是Tiny,Small,Medium.那么为什么在Compact,Large,Huge下不行呢.我举一例子,代码如下:#include<stdio.h>#include<conio.h>int main(void){ clrscr(); printf("%d",sizeof(in...

小心使用malloc()函数

经验五中用到malloc()函数,我就不得不说一说它了.我在此不得不提醒大家一下:malloc()函数不是你想象中那么好用的.在此,我就说一下本人在用malloc()函数遇到的麻烦.代码的形式大概如下:#include<stdio.h>#include<conio.h>int main(void){...char **pointer=NULL;char string[2]={1,2};char string1[3]={1,2,3};char string2[4]={1,2,3,4};... pointer=(char**)malloc(sizeof(char*)*3);pointer[...

多级指针的使用

在此,我想为大家谈一谈多级指针的使用问题.我本想不要浪费篇幅来谈多级指针.它对那些使用过的人来说很容易,但对于刚学的人并不那顺手.当初,我在学的时侯,也不是很明白.所以才拿出来谈一谈.还是先给一个例子吧.当程序设计要求:建立一个三级指针变量来管理学生姓名,其二级指针指向一个班,一级指针指向学生姓名.要求就是这么多,大家可以略微思考一下.从要求中可以分析:我们无法知道一个学校有多少个班和每一个班中有多少名学生.那么应该怎样做呢.可以用宏定义#define SCHOOL_CLASS_NUM 50来说明学校拥有多少个班.可以用一个整型数组student_NUM[SCHOOL_CLASS_NUM...

函数调用时参数传入的顺序 小谈

在函数的调用时需要注意参数的传入的顺序.我可以给一个例子:#include<stdio.h>#include<conio.h>int main(void){ int i=0; clrscr(); printf("%d,%d",i++,i++); getch(); return 0;}printf()函数是我们在编程时用得比较多的函数.大家不妨运行一下,得出程序的结果.(结果在此不予给出)从结果可以看出参数的传递相当于:printf("%d,%d",1,0);也就是说先从最后一个参数开始传递.可以得出程序中printf()的执行过程:printf("%d,%d",i++,i++)...