简单的错误总结以及如何调试代码
水平有限,我只能尽我所能的简单讲一下一些经验以及如何将代码调试正确。
先求求大家不要PTA直接写代码,除非你很有把握,不然真的还是去编译器写完调试完样例测试无误后提交到PTA上。别再拿没有调试过的代码问我了,我遭不住,自己先调试。调试不对检查思路,最后再来问我。
首先讲一下我最近遇到的常见几种错误:
1. [Error] expected ';' before 'n',这种错误一般用了中文的分号,或者少了分号,一般会在报错的前一行。for循环括号里面,内容可以省略,但是两个分号是不能省略,如果少了某个分号,一样会这样报错。编译错误都可以直接把报错复制黏贴拿去百度,或者通过翻译看一下具体是什么意思。编译错误先看看有没有用中文字符,有没有少分号。
2.类型定义错误,计算时可以通过*1.0这种方式将运算的数据升级成double类型,但是不能把浮点数赋给一个int类型的变量,变量不会自动升级成double,只会截取整数部分。计算简单的多项式求和问题的时候挺多同学犯了这个错误。
3.scanf读入不正确,一种是没有正确使用占位符,int类型对应的是%d,double对应的是%lf。另一种是少了&运算符赋给变量。可以在scanf后面直接printf输出你赋值的变量检验是否正确赋值。
4.printf占位符也要注意使用正确,可以去百度了解一下printf各种占位符有些时候有奇效。
5.循环的时候注意不要改变判断条件要用到的变量的值。会导致你的循环没有按照你的原先的预先正常运行。也要记得循环退出条件有没有写错,现在遇到的运行时间过长多半是循环没有写好导致的死循环。
6.=是赋值运算符,==才是逻辑运算符,在if语句以及循环语句里应该用==,不要用错了,以及写代码与平时数学计算有差错,不能用连等,比如a<b<c,应该写成a<b&&b<c,否则在运行的时候会按照顺序进行a<b的运算,如果成立得到的会是1,不成立得到会是0,然后再拿这个0或者1的数字去跟<c进行逻辑判断,得不到你想要的结果。
接下来讲讲按照我的经验如何调试代码,每道题目在写之前都应该先思考整体的思路和方向,避免一边写一边思考的情况出现,在确保思路清晰完善后,可以在用注释写下每一步的思路,划分开每一步,接着再一步步完善代码,在出问题的时候也可以从上到下按步排查错误。
在答案没有按照预期的情况出现的时候,首先检查有没有正确读入,可以将你读入的东西用printf输出,与题目的输入对比看是否错误。
如果读入没有问题,接着判断思路是否有纰漏,可以每一步运算的时候,printf输出变量操作前的数值,再输出操作后的数值,看是否与思路有偏差,如果没有问题可以试着更改输入,自己想几个数据,在草稿纸上演算出结果,然后在运行程序输入刚才构造的数据,看程序有没有按照你的预期进行。常规数据测试完,可以测试极端数据,比如0,-1,1,这种特殊数据看是否满足结果,检验是否有将特殊数据进行特判。
根据每一步的情况,反过去调试代码,再检验是否符合思考或者思路是否错误,都满足后在提交代码。 如果经过半个小时到一个小时的调试,仍然无法得出结果,可以去我的博客看一下测试数据和思路或者看一下大佬的代码,学习思路,再自己独立写一遍。如果我的博客少了相应的题目以后会一步步完善。

浙公网安备 33010602011771号