OJ中的那些小丑行为

在平时做OJ的时候,我们会经常遇到很多不经意间犯的错误,
有些时候错得自己像小丑一样。

My feelings

我想的是把寻找错误的思路与错误会导致的结果总结一下,给自己以指导。

  1. 编译错误引火线
  • 复制到做题平台上时复制漏了一些东西。 -不必多讲。
  • if语句后加了分号,导致出现对于else语句的错误。
  • 变量重名,或者没改完一些变量的名字。
  • 忘了一些分号。
  • int mian(int main)或者stdio打错了
  • 修改程序的时候忘了关黑框,有时候会不能编译新的文件。
  • for循环中分号用成逗号
  • 函数声明与定义部分,都需要对于形式变量的数据类型进行设置。
  1. 运行错误引火线
  • for循环中计数的变量(比如i,j)从小数到大数的时候用了减,从大数到小数的时候用了加
    死循环,for循环变量改变没有朝着限定条件来改,永远不会达到那个条件,退出。
  1. 程序结果错误引火线
  • scanf没有加取址符,printf加了取址符
    scanf不加的话,就不会对于变量进行赋值操作
    printf加的话,返回的是变量的储存地址,垃圾数据。

  • 部分需要累加或者累乘的数据,比如sum等,没有在开始的时候设置为0(+)或者1( * )
    数据起始值不知道,一定不能够经过累加或者累乘得到相应的结果。

  • 循环完一次的结果归零。
    有些循环比如while进行多实例检测的时候,会执行多个循环,
    如果某些计数的变量没有归零,会导致数据很离谱。

  • 判断相等运算符 == 写成赋值运算符 =
    建议把变量放后面,值放前面,这样如果犯这个错的话会报错

  • 赋值运算符=的结合性不清楚。
    用变量给变量赋值时,有可能反而用没有赋值的变量给赋过值的变量赋值,数据一定错。

  • double转int的坑
    double储存的数据是近似值,切去小数点后有可能数据-1
    届时答案对不对完全看你运气。

  • 数据类型对应的格式化符在更改变量类型的时候没有改变。

  • switch语句中漏写了一个break。
    直接不受控地向下面的case进发,全部执行,直到遇到新的break。

  • scanf中的格式加空格就算了,别的不要轻易加。

  • 多字符输入的时候,注意处理回车与空格,一般用getchar来解决

检查的思路:

  1. 首先基本问题,不要出编译错误,对于一些常见符号要打对
    比如,scanf中的&符号,各个语句后面的分号,大括号不要漏一边。
  2. 然后,看修改变量的时候有没有注意类型,
    相应的标识符还有对应的在scanf中或者printf中的格式化%符有没有改
  3. 接着看循环,
    对于for,看它的循环变量是否能够达到那个限定条件,是不是会死循环
    对于while,看它程序结束后是否真的能够得到你想要的结果。也要注意死循环。
    看分支,看if语句的限定是否满足自己想要的条件,是否存在== 写成=的情况。
    看switch语句的break。
  4. 最后,再检查一下自己是不是一些形式上的错误,复制粘贴等不合适。
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2023-2024 大学生暮暖
  • 访问人数: | 浏览次数:

请我喝杯奶茶吧~

支付宝
微信