



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言常见错误及解决方法(注:红色粗体是常见的错误,请大家检查自己的程序,并注意尽量不要犯这些常见的错误。其余它体是避免错误的方法和正确的写法)一、基础知识和数据类型、表达式1、 拼写错误,尤其是include,main,void,float等词。C语言的32个关键字与基本含义如下:double:声明双精度变量或函数int:声明整型变量或函数char:声明字符型变量或函数float:声明浮点型变量或函数void:声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)auto:声明自动变量一般不使用struct:声明结构体变量或函数break:跳出当前循环else:条件语句否定分支(与i
2、f连用)long:声明长整型变量或函数switch:用于开关语句case:开关语句分支enum:声明枚举类型register:声明积存器变量typedef:用以给数据类型取别名(当然还有其他作用)extern:声明变量是在其他文件正声明(也可以看做是引用变量)return:子程序返回语句(可以带参数,也看不带参数)union:声明联合数据类型const:声明只读变量short:声明短整型变量或函数unsigned:声明无符号类型变量或函数continue:结束当前循环,开始下一轮循环for:一种循环语句(可意会不可言传)signed:生命有符号类型变量或函数default:开关语句中的&quo
3、t;其他"分支goto:无条件跳转语句sizeof:计算数据类型长度volatile:说明变量在程序执行中可被隐含地改变do:循环语句的循环体while:循环语句的循环条件static:声明静态变量if:条件语句2、 ,口,(),""不配对。解决这个问题最好的方法就是每当写这些符号的时候就先写成一对,然后再在中间加内容。3、 忘记在语句的末尾加分号,或在预处理命令后多加分号。记住:每一个语句的后边都要加分号,而预处理命令并不是语句,所以不加分号,他们必须每行一条,不能把多个命令写在一行。4、 混淆/和;注释对应的符号是/*/,而转义字符是以开头,除号是/。5、 p
4、rintf()和scanf()的参数设置有误,主要表现在以下几方面:类型不匹配的问题。(例如:有floata=3.5,但输出的时候printf('%=",a则屏幕上会显示出a=0.00000或者提示其它运行错误)。基本原则是:float对应%f,int对应%d,char对应%c。个数不匹配。无论是哪个函数,都可以有n个参数,第一个永远是“”括起来的内容,表示输出格式。剩下的n-1个是输出的变量或者输入的变量的地址。需要注意的是,如果后边有n-1个参数,那么前边一定对应n-1个£一类的格式说明符。scanf()中变量前忘了加&。记住:scanf()中变量前要有
5、&(但后边学到的字符数组名和指针前不用加)6、 定义标识符的时候经常出现使用非法字符的情况,例如:标识符中不能用空格,也就是说不能有这样的定义:intradiumofcircle;一般情况下可用下划线将三个单词连接在一起。7、 在使用变量前未定义,或未初始化。例如:若下边的sum未定义,则在编译时会提示相应的错误信息,而若未初始化为0,则求和的结果一定是错误的。voidmain()intI,a10,sum=0;/*只要下边要用,这个定义就必须要有,一般情况下也要有初始值*/for(I=0;I<10;I+)sum+=aI;printf(“%d”,sum);8、 符号常量定义错误。例
6、如:#definePI=3.14159,这里的=应该换成空格。9、 计算错误。主要注意:,和其它运算符一起运算时,除根据优先级进行计算时,还要考虑先后位置的特殊含义;数据类型不一致时发生的自动转换也会导致计算的误差;还要注意求模结果的符号与被除数相同;某些特殊情况下使用懒惰求值法。10、 不能除以0,要做合法性检查;11、 类型溢出。记住每种数据类型的取值范围,确保数据在所定义类型范围之内;12、 数学表达式的格式有误。常见的有:(1)数学与C语言运算表达式的混淆(例如:=表示赋值,而=才表示我们数学中的相等关系)。(2)、忽略了运算的优先级。解决这个问题的最好方法就是写数学表达式时不要从左到
7、右,而是按优先级的顺序写,写完优先级高的一个表达式后加上()再写下一级的表达式,例如:计算梯形的面积时,要s=(a+b)*h)/2,不要1/2*a+b*h.(3)忽略了计算和赋值时的自动转换。例如:floathalf=1/2;这样,因为=右边是整数相除的结果为整数0,不会彳#到0.5存入half,进而会影响下边的计算结果。要想不在这儿绊跟头,当计算不同类型的数据时,一定注意会不会出现引起错误的自动转换,建议最好加上强制转换。(4)赋值号左边不是变量,例如:若有#definePI3.14,程序中又出现PI=3.14159。又例如:f(n)=f(n-1)*n(这是典型的数学语言,在C语言中右边的乘
8、积不能正确存储,而左边又是一个函数调用)。13、 使用库函数前,尤其是数学函数忘了加#include<?.h>。二、流程控制1、 丢掉语句结束标记“;”,尤其是for语句中表达式后或do-while语句后的分号,或在预处理命令后边、while()后、for()后加“;”;2、 If语句或循环语句中逻辑表达式或关系表达式书写错误。一定要注意C语言的条件与数学表达式的区别(例如我们数学中经常写到的0WxW9,在C语言中应该写成x>=0&&x<=9)。3、if-else嵌套时不配对。最好在写每个条件时要用两个分别将两个分支先括起来,再添加其中的语句,以保证其配
9、对不易错。4、 switch()语句中的格式不正确。()中的表达式结果一定是一些明确的值,不能是区间;表达式的所有可能结果要列在case后边,case与常量之间有一空格,不要丢掉必要的break;5、 随意修改循环控制变量i的值,导致循环次数的改变,尤其是当循环有嵌套时。在循环体中,不要将循环控制变量进行另外的改变。6、 分不清什么情况下用双重循环,什么情况下用两个控制变量写成一重循环。当I不变,j又循环一遍的时候用双重循环。当I,j同时变化的时候用一重循环,此时,循环控制变量有两个,但条件只写一个就可以,因为另一个总是进行相应的变化的。7、 忽略循环体与循环控制变量的关系。其实,很多情况下,
10、循环控制变量都在循环体中起到非常重要的作用。应该利用上这种关系。三、数组与指针1、字符串的输入有错误:主要表现在使用scanf()或gets()时加了&,或输入字符串时用循环,(这样的话,字符个数无论多长,都不会为自动加0,将来引用的时候也就不能以字符串的形式引用。)2、 对字符串的处理中,循环条件仍然写成I<N。由于字符串是不定长的,所以循环条件一般为strI!=0或I<strlen(str)3、 而输入所对应的变量是指针时(常见的有:输入的变量是字符数组名或指向字符串的指针)不能加。4、 指针定义后未赋值就引用。如果在定义时不知道赋什么值,可以用p=NULL赋初值,以避
11、免引起的灾难性错误。5、 分不清p和p。前者是指针,即地址,后者表示指针所间接引用的数据,但如果是二级指针或多级指针,取*以后得到的仍然可能是地址。四、函数1、 函数定义的时候,函数头部加分号,而函数声明的地方忘了加分号2、 函数实参格式不对,主要表现在:给出实参时,多给出数组类型,或者,形参是数组inta;的时候,给出的a或aI.3、 递归时忘了设置边界条件,这样易造成死循环调用。4、 使用函数之前未声明(包括C库函数的声明)。建议大家,将所定义的一切函数都在程序开始的预处理命令后加上函数原型的声明,这样做不仅可以避免错误,而且整个程序的结构看起来更清楚。五、结构体共用体1 、结构体类型定义
12、有误,主要表现在:结构体类型里还有嵌套的时候,忘记了成员名称。(例如:下边的例子中,有些同学经常忽略了birthday)2 、结构体类型名和结构体变量名混淆。例如:structSTUStructdataintyear,month,day;birthday;structSTUa;structSTU是类型名称,而且不分配空间,且不能直接引用。只有定义了结构体类型structSTU的变量a以后,才为a分配相应的内存空间,引用时也要是a.?3 结构体变量的成员引用不正确,尤其是当结构体类型中有嵌套定义的时候。一定要一级一级的引用。例如:上边的例子:如果引用其中的年的话,一定是a.birthday.year.不能直接a.year.4 对结构体变量进行输入输出的时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商品陈列大全
- 2025年广东省初中学业水平考试模拟英语试题(原卷版+解析版)
- 《会计信息系统应用》课件 学习情境2 系统管理和基础设置
- 二零二五年度北京市电子产品寄存与智能监控服务协议
- 二零二五年度办公空间互换及增值服务合作协议
- 女神节鲜花主题暖场活动
- 智能停车场管理系统的需求分析
- 智能电动汽车充电桩
- 低空经济示范区
- 初期雨水收集系统
- 江西申麦新材料科技有限公司年产4万吨有机硅改性产品及配套8300吨特种催化剂和3700吨无机盐一体化项目环境影响报告
- 汽修实训安全培训课件
- 医学口腔科急救药品及急救措施课件
- 土木工程无损检测技术课件
- GB/T 22310-2023道路车辆制动衬片盘式制动衬块受热膨胀量试验方法
- 中国古代突骑研究
- 2023瓷砖店和装修公司合作协议完整版
- JCT2112-2012 塑料防护排水板
- 第14章欧姆定律复习说课稿 2022-2023学年苏科版九年级物理上册
- 《思维导图学习法》课件
- 化妆品功效评价
评论
0/150
提交评论