谈 c 语言编程常遇到的问题及解决方法

谈 c 语言编程常遇到的问题及解决方法

ID:19952927

大小:34.50 KB

页数:4页

时间:2018-10-08

谈 c 语言编程常遇到的问题及解决方法_第1页
谈 c 语言编程常遇到的问题及解决方法_第2页
谈 c 语言编程常遇到的问题及解决方法_第3页
谈 c 语言编程常遇到的问题及解决方法_第4页
资源描述:

《谈 c 语言编程常遇到的问题及解决方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、谈C语言编程常遇到的问题及解决方法遂平职业教育中心许玉敏摘要:C语言因其功能强大,使用灵活,目标代码生成率高等诸多优点而被广泛使用,但C语言本身存在一些不完善的地方,常常出现一些意想不到的错误,给编程者带来许多不便.指出了在用C语言编程时常遇到的一些问题及解决办法.关键词:解决;程序;问题;方法C语言是软件开发者使用最多的一种语言,在实践中,一方面它能向程序开发人员充分提供展示创造力的环境,另一方面,在编程时也常遇到一些意想不到的问题,而有些问题是C语言编译系统本身无法解决的,只有靠程序员自己来解决.本文给出用C语言编程时遇到的一些问

2、题及解决方法,希望给软件开发人员有所帮助,更好的完成软件开发任务.1、数据类型转换问题C语言允许不同类型的数据间进行混合运算时系统会自动进行类型转换,但转换的依据是表达式中的各运算量的类型,而不管运算结果的实际类型是什么.这样,当运算结果的实际类型和运算量的类型不符时,就会出错.请看下面的例子.例:用公式求的近似值,直到最后一项的绝对值小于10为止.程序如下:#include!math.hmain(){ints=1,t=1;floatt=1,pi=0;while(fabs(t)>=e-6){pi=pi+t;n=n+2;s-=s;t=s

3、n;}pi=pi*4;printf(!pi=%10.6f,pi);第4页共4页}上面程序的执行结果是pi=4000000而不是pi=3141594.要想得到正确的结果pi=3141594,必须将语句t=sn;中的s或n转换成实型,即将上例中的t=sn语句替换为以下三种语句之一.t=(float)sn;t=s(float)n;t=(float)s(float)n;上例程序编译时都可顺利通过,初学者很难发现错误.因此C语言作数据运算时,编程者必须注意运算结果的数据类型,如果运算结果超过了运算数据类型所表示的数值范围,就必须加类型强制转

4、换运算符.2scanf()函数使用中的问题scanf()函数是C语言中经常使用的格式输入函数.它对输入数据的格式和类型都有严格要求,因此初学者在使用scanf()函数时,经常不能正确输入数据而使程序无法运行,系统又不给出错误提示,使用者很难找出错误原因.例如:一般认为下面这个程序是可以正常运行的.例:输入两个整数,显示其和,直到其一为0为止.main(){inta,b;while(a!=0&&b!=0)printf(!Pleaseinputtwointegers:);{scanf(!%d,%d,&a,&b);printf(!%

5、d+%d=%d,a,b,a+b);}}然而,一旦输入数据格式或类型不符合要求(如输入106,as等),则不仅这一次输入失败,而且以后程序常常循环不止,不接受新的数据(这是因为非法字符还存留在键盘缓冲区中).为避免这种现象,可以使用对scanf()的返回值进行判断的方法,使程序具有容错功能.具体地说,就是将该程序中的scanf()语句替换为:while(scanf(!%d,%d,&a,&b)!=2){第4页共4页printf(!Invalidinput,doitagain);fflush(stdin);}3、内存管理错误问题

6、灵活性是C语言的主要优点之一,它只对程序进行语法检查而把语意的合理性检查交给程序员,这给程序员提供了很多方便,但同时也给内存管理带来了一些副作用,极易出现内存管理错误,而且这类错误不易发现.C语言常见内存管理错误有以下四种.(1)分配一块内存,引用它未经初始化的内容.例如:char*ch;charstr[100];ch=malloc(100);*ch指向分配的一块内存*strcpy(str,ch);*引用未经初始化的内容*这样,str内充满了莫名其妙的内容,如果在程序的其他地方引用str,必然出错(值得注意的是以上程序编译时并无错误指

7、出).(2)释放一块内存,但继续引用其内容.例如:char*ch;charstr[]=China;inti;ch=malloc(100);strcpy(ch,str);printf(!%s,ch);free(ch);*释放ch指向的内存*printf(!%s,ch);*引用ch指向的内存,但是它已经被释放*(3)分配一块内存,但是没有保存指向该内存的指针,所以无法引用或释放它,这块内存成为系统中悬浮起来的!垃圾浪费了内存资源.例如:char*ch;ch=malloc(100);ch=malloc(10);free(ch);第4页共4页

8、以上代码中,首先分配了100个字节的内存块,并用ch指向它,但是,在没有释放这块内存之前,又使ch指向新分配的10个字节内存块.因此,以前的100个字节内存块指针丢失,系统对这块内存失去了控制,无法释放和使用它,浪费了内

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。