- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
常见错误类型与程序调试
常见错误和程序调试 1 常见错误分析 2 程序调试 单击此处编辑母版标题样式 要真正学好C、用好C并不容易,“灵活”固然是好事,但也使人难以掌握,尤其是初学者往往出了错还不知怎么回事。 C编译程序对语法的检查不如其他高级语言那样严格(这是为了给程序人员留下“灵活”的余地)。因此,往往要由程序设计者自己设法保证程序的正确性。需要不断积累经验,提高程序设计和调试程序的水平。 13.1 常见错误分析 下面将初学者在学习和使用C语言(不包括C++)时容易犯的错误列举出来,以起提醒的作用。这些内容在以前各章中大多已谈到,为便于查阅,在本章中集中列举,供初学者参考,以此为鉴。 (1) 忘记定义变量。如: main( ) {x=3; y=6; printf(%d\n ,x+y); } (2) 输入输出的数据的类型与所用格式说明符不一致。 例如,若a已定义为整型,b已定义为实型。 a=3;b=4.5; printf(%f %d\n,a,b); 编译时不给出出错信息,但运行结果将与原意不符,输出为 0.000000 16402 (3) 未注意int型数据的数值范围。 一般微型计算机上使用的C编译系统,对一个整型数据分配两个字节。因此一个整数的范围为 -215~215-1,即-32768~32767。常见这样的程序段: int num; num=89101; printf(%d,num); 得到的却是23565,原因是89101已超过32767。两个字节容纳不下89101,则将高位截去。 printf(%ld,num); 请注意,如果只定义num为long型,而在输出时仍用“%d”说明符,仍会出现以上错误。 对于超过整个范围的数,要用long型,即改为 long int num; num=89101; (4) 输入变量时忘记使用地址符。如: scanf(%d%d,a,b); C语言要求指明“向哪个地址标识的单元送值”。应写成scanf(%d%d,a,b); (5) 输入时数据的组织与要求不符。 用scanf函数输入数据,应注意如何组织输入数据。 在scanf输入时,除了格式控制符以外的其他字符必须按原样输入。 假如有以下scanf函数: scanf(%d%d,a,b); 有人按下面的方法输入数据: 3,4 应该用以下方法输入: 3 4 如果scanf函数为scanf(%d,%d,a,b); 应按以下方法输入: 3,4 此时如果用“34”反而错了。 (6) 误把“=”作为“等于”比较符。 在C语言中,“=”是赋值运算符,“==”才是关系运算符“等于”。如果写成 if(a=b) printf(a equal to b); C编译系统将(a=b)作为赋值表达式处理,将b的值赋给a,然后判断a的值是否零,若为非零,则作为“真”;若为零作为假。 如果a的值为3,b的值为4,a≠b,按原意不应输出“ae q u a lt ob”。而现在输出“ae q u a lt o b”。 这种错误在编译时是检查不出来的,但运行结果往往是错的。而且由于习惯的影响,程序设计者自己往往也不易发觉。 (7) 语句后面漏分号。 C语言规定语句末尾必须有分号。分号是C语句不可缺少的一部分。这也是和其他语言不同的。有的初学者往往忘记写这一分号。如: a=3 b=4 编译时,编译程序在“a=3”后面未发现分号,就把下一行“b=4”也作为上一行的语句的一部分,这就出现语法错误。如果用复合语句,漏写最后一个语句的分号,如: {t=a; a=b; b=t} (8) 在不该加分号的地方加了分号。 例如: if(a>b); printf(a is larger than b\n); 本意为当a>b时输出“a is larger than b”的信息。 但由于在if(a>b)后加了分号,因此if语句到此结束。即当(a>b)为真时,执行一个空语句。本来想a≤b时不输出上述信息,但现在printf函数语句并不从属于if语句,而是与if语句平行的语句。不论 a>b还是a≤b,都输出“a is larger than b”。 又如: for(i=0;i<10;i++); {scanf(%d,x); printf(%d\n,x*x); } 本意为先后输入10个数,每输入一个数后输出它的平方值。由于在for( )后加了一个分号,使循环体变成了空语句。只能输入一个整数并输出它的平方值。 总之,在if、for、while语句中,不要画蛇添足多加分号。 (9) 对应该有花括弧的复合语句,忘记加花括弧
您可能关注的文档
最近下载
- 《新媒体传播》课件.ppt VIP
- 2025年安全员c2考试试题库(答案+解析).docx
- GBT45001-2020SO45001:2018 职业健康安全管理体系要求及使用指南.pdf VIP
- 个人业绩相关信息采集表含政治表现、最满意、主要特点、不足.pdf VIP
- 部编版六年级上册道德与法治教案:感受生活中的法律知识.docx VIP
- 货运保险与货损理赔通道整合2025年应用前景.docx VIP
- 《飞机构造基础》课件——第一章 飞机结构.pptx VIP
- 中医治疗“慢脾风”医案37例.doc
- 小学科学新教科版二年级上册第一单元 造房子教案(共6课)(2025秋).docx VIP
- 2025年广西公需科目第二套答案.docx VIP
文档评论(0)