以下错误皆源于自身错误和同学答疑时出现的千奇百怪的错误。啊,才学多少啊,不得不感慨同学们的创造力。
变量
定义变量时不初始化
解决办法:设定变量的时候养成初始化的好习惯,除了一些马上就要scanf的变量之外,其它变量统统初始化。
定义变量初始化了,但是初始化的值会引发问题
解决办法:初始化变量时,先要判断变量的作用再选择初始化的值。例如一个需要不断和数列中数字比大小,并存储数列中最大整数的变量,就不要初始化为0,最好初始化为-1,因为有的题目最大值就是0。
需要重复使用的计数器类型变量用完不初始化,导致全加进去了
解决办法:一个循环写完之后检查计数器。如果有和计数器相关的输出,那么如果计数器此时应当初始化,就直接把初始化跟在输出之后。
变量名起得差不多结果用串了
解决办法:真别再起一串a、b、c、d、e、f的变量名字了!同学帮忙检查都一脸懵!建议变量名和其实际意义相关,例如“result”、“ans”等。或者与题目中的变量名保持一致。
输入
scanf不加取地址运算符&
解决办法:长点记性吧!如果找不到bug记得想一下自己是不是落了什么东西。
scanf赋值顺序和题目反着来
解决办法:赋值之前请确认自己充分理解了题目的输入方式和顺序,同时变量名请不要乱取,以免把自己搞混。
ASCII码背串了
解决办法:实在想不起来,请用单引号字符代替。例如想不起字符a的ASCII码,请直接用'a'代替,这样也会增加代码的可移植性。
'1' = 49
'a' = 97
'a' - 'A' = 32
输出
printf的时候不换行或者乱换行导致答案格式不对
解决办法:长点心吧!或者先不管printf细节,调试的时候再比对着自己的结果和目标结果,进行修改。
printf的内容就是不复制题目非要自己打,结果少个字母或者少个空格
解决办法:求求你了!这种要打印一长串固定的话的,直接复制吧!!!
格式
括号以及分号写成中文字符
解决办法:把中英转换关了。
不写分号
解决办法:看报错信息,或者长点心。
括号嵌套,结果左右括号数量不一样
解决办法:看报错信息,或者打括号的的时候直接一对一对打。
某个结构体两行以上不加大括号
解决办法:除非非常确信这下面只有一行,不然请习惯性地打一组{}上去。
条件语句
if里面就写一个=
解决办法:看报错,长点心。
if和else if混着写把自己搞乱了
解决办法:捋清楚自己条件判断的逻辑之后再写。
else后面还加条件
解决办法:想想为什么它叫else而不叫else if?此类报错一般会提示else后面加一个“;”,请注意。
循环语句
进入循环之前变量不输入
解决办法:第一次使用某个变量前先想想它有没有意义?检查的时候可以按照过程模拟一遍,看看所有的变量有没有被初始化或者赋值。
for里面加减号写反(或者大于小于号写反)导致循环永远出不来了
解决办法:TLE的时候,查查自己循环里面的符号和条件!
数据类型
两个数字相乘导致原来的数据类型溢出了
解决办法:如果测试用例对了但提交之后检查点错两个,建议查查数据类型。用乘法之前也注意一下数据是否过大。
用整数做除法再去和浮点数运算,没有做强制类型转换,导致整数除完直接把余数扔了
解决办法:做运算的时候,如果有除法,请留意一下数据类型,别除着除着除丢了。
判断浮点数等于零直接用等号
解决方法:由于浮点数的精度,导致浮点数基本不可能严格等于零。判断浮点数等于零与要用到<math.h>中的fabs()函数,求出这个极小浮点数的绝对值。当绝对值小于时,认为它近似等于零。即:
fabs(n)<1e-8
特殊情况
不注意边界导致多一个或者少一个
解决方法:注意一下吧,尤其是每组数据都差一点的时候。
不考虑例如0、1、最大值等特殊临界情况或考虑错误
解决方法:提交后发现只错一两个,或者递归直接TLE了,请看看自己是否落下了什么特殊情况。
看不懂的一坨屎山代码
解决方法:不要拉屎。
不读题胡写
解决方法:6