本页面主要分享一下在竞赛中经常/很多人会出现的错误。
-1. 由于运算符优先级产生的错误。
+- 由于运算符优先级产生的错误。
- `1 << 1+1` : 1 左移了 2,即该表达式返回的值是 `4` 。
- 由于宏的展开,且未加括号导致的错误:
```cpp
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` 。参考[链接](https://stackoverflow.com/questions/4264127/correct-format-specifier-for-double-in-printf)。
+- `int mian()` 。
-7. 分治未判边界导致死递归。
+- 无向图边表未开 2 倍。
-8. 读入优化未判断负数。
+- 多组数据未清空数组。
-9. 不正确地使用 `static` 修饰符。
+- 分治未判边界导致死递归。
-10. `-1 >> 1 == 1` 。
+- 读入优化未判断负数。
-11. 不正确地使用宏。 `#define min(x,y) x<y?x:y` 如果这里的 `x` 或 `y` 是表达式,会被重复计算。
+- 不正确地使用 `static` 修饰符。
-12. 一些 OJ 上选择 `c++` 和 `g++` 提交得到的结果可能会不一样。
+- `-1 >> 1 == 1` 。
-13. 写完 `struct` 或 `class` 忘记写分号。
+- 写完 `struct` 或 `class` 忘记写分号。
-14. 存图下标从 0 开始输入节点未 -1.
+- 存图下标从 0 开始输入节点未 -1.
-15. 赋值运算符和`==`不分。
+- 赋值运算符和`==`不分。
- 示例:
```cpp
if(n=1)puts("Yes");
else puts("No");
```
- 无论 $ n $ 的值之前为多少,输出肯定是`Yes`。
+ 无论 $n$ 的值之前为多少,输出肯定是`Yes`。
-16. 没有考虑数组下标出现负数的情况
+- 没有考虑数组下标出现负数的情况
-17. scanf 读入的时候没加 & 取地址符
+- scanf 读入的时候没加 & 取地址符
-18. 在执行`ios::sync_with_stdio(false);`后混用两种IO,导致输出错乱。
+- 在执行`ios::sync_with_stdio(false);`后混用两种IO,导致输出错乱。
- 可以参考这个例子。
```cpp
//这个例子将说明,关闭与stdio的同步后,混用两种IO的后果