常见错误

本页面主要分享一下在竞赛中经常/很多人会出现的错误。

  1. 由于运算符优先级产生的错误。
    • 1 << 1+1 : 1 左移了 2,即该表达式返回的值是 4
    • 由于宏的展开,且未加括号导致的错误:
      1
      2
      #define pwr(x) x* x
      pwr(2 + 2)
      
      该宏返回的值并非 4^2 = 16而是 2+2\times 2+2 = 8
  2. 文件操作有可能会发生的错误。

    • 对拍时未清除文件指针即 fclose(fp) 就又令 fp = fopen() , 这会使得进程出现大量的文件野指针。
    • freopen() 中的文件名未加 .in / .out
  3. int mian()

  4. 无向图边表未开 2 倍。

  5. 多组数据未清空数组。

  6. 输出 double 要使用 %f 而非 %lf 。参考链接

  7. 分治未判边界导致死递归。

  8. 读入优化未判断负数。

  9. 不正确地使用 static 修饰符。

  10. -1 >> 1 == 1

  11. 不正确地使用宏。 #define min(x,y) x<y?x:y 如果这里的 xy 是表达式,会被重复计算。

  12. 一些 OJ 上选择 c++g++ 提交得到的结果可能会不一样。

  13. 写完 structclass 忘记写分号。

  14. 存图下标从 0 开始输入节点未 -1.

  15. 没有考虑数组下标出现负数的情况

  16. scanf 读入的时候没加 & 取地址符


评论