您好,欢迎访问三七文档
1、书写标识符时,忽略了大小写字母的区别(C语言对大小写敏感)2、忽略了变量的类型,进行了不合法的运算(e.g.floata=9.0;a%=2;//运算错误,求模%只对整型有效)3、忽略了“=”与“==”的区别(修正方法:将比较数字提前e.g.inta=3;if(3==a)a++;//将数字提前若误用“=”编译器会提示错误)4、将字符常量和字符串常量混淆(字符常量为’x’,字符串常量为”XX”,若是”x”则系统会默认在x后面加上一个空字符以表示字符串的结束,换句话说,用单引号才表示字符,双引号表示的就是字符串)5、将库函数名写错(拼写错误,编译器会提示,注意提示内容即可)6、忘记或多加分号(编译器会提示,尤其注意循环以及宏定义(#define)不能乱用分号。Bytheway,一般来说编译器提示的都是说下一条语句出错,觉得提示诡异的时候多往上往下翻一翻)7、定义数组时误用变量(inta[i];//语句错误,不能用变量指定数组长度,可用malloc函数解决……具体方法谷歌一下)8、输入变量时忘记加“&”(系统不会提示出错,但结果肯定不是你想要的)9、在不应在“&”的位置加了“&”(注意如果是指针的话,本身已经就是地址,无需加&,具体等教到指针的时候自然会明白,留个心眼就是)10、输入数据的方式与要求不符(scanf(“%d,%d”,a,b);//输入a,b的时候要使用“,”隔开否则结果肯定不是你想要的。个人建议分多个scanf写或者在输入前打印提示)11、输入字符的格式与要求不一致(类似上面那个,空格也算字符,解决方法同上)12、输入输出的数据类型与所用格式说明符不一致(……这个不解释,有些编译器不会报错,自己小心)13、在定义数组时,将定义的“元素个数”误认为是可使用的最大下标值(e.g.inta[10];a[10]=10;//错误,最多只到a[9]数组停止bytheway,编译器不会报错,因为a[10]指向空间位置,所以运行结果未知)14、switch语句中漏写break语句(switch语句在没有break存在的情况下,直接运行下一个case,直至遇到break或者语句结束)15、输入数据时,企图规定精度(e.g.floata;scanf(“%7.2f”,a);//报不报错不知道,但是你规定的精度肯定是没用的)16、忽视了while和do-while语句的区别(一个是判断后决定是否执行,一个是先执行后判断是否继续执行。换句话说,do-while不管条件成立与否,都会至少执行一次)17、没有用#include说明头文件(……这个没什么好解释的)18、子函数在说明和定义时类型不一致(包括函数的返回值类型和形参类型,具体参照函数章节)、19、循环语句中,控制变量在每次循环未进行修改(死循环,系统不会报错,这提醒我们要记得随时保存编好的程序,turboC有时候关闭DOS窗口就顺带把turboC给关了~~编一半的东西自然也就浮云了)20、错记“”与“+”的优先级(“+”优先级更大a2+1;相当于左移3位)21、指针未初始化(具体参照指针章节,运行时会报错)22、没注意到函数参数的求值顺序(C语言一般都是从右往左的e.g.inti=3;printf(“%d%d%d”,I,++I,++i);//参照一般顺序结果会是554,不过可能因为编译器库函数的不同而结果有差异,如果不一样别拍砖……)23、头文件包含重复(等到自己编写头文件的时候就理解是怎么回事了)24、文件操作时路径名错误(注意在fopen中调用这样的路径G:\[Download得不到你想要的结果的,”\”为转义字符,系统会将’\[’看作一个整体,正确的写法是G:\\[Download,’\\’打印出来就是”\”)25、动态内存使用错误(1、注意加上一个if语句处理未分配到内存的情况2、注意用free()释放无需使用内存)
本文标题:C编程中常见错误
链接地址:https://www.777doc.com/doc-2908709 .html