C++ JOURNAL / 我的易错记录
调试与排错记录
保留真实遇到的现象,区分已知错误和仍需代码才能判断的问题。
按我的学习记录整理 · 示例用于帮助理解这篇记录里
我遇到过的运行现象
- 终端只输出一个数字。
- 程序运行后窗口关闭。
- VS Code 红色波浪线被误关闭。
- 输入顺序导致输出结果奇怪。
- 输入 1 0 0 0 后,结果为什么是 2?
- 为什么有些程序输出 0?
- 为什么会出现 7871 这样的意外数字?
这些记录没有附上每一次完整代码和运行过程,所以现在不为它们编造具体原因。一个异常数字本身,不足以判断是哪一行出了问题。
下次按这个顺序检查
- 是否运行了最新程序:代码保存、重新编译了吗?编译报错后是否还在运行旧文件?
- 输入:顺序和类型是否一致?逗号被谁读走?是否还有数据没有输入?输入是否失败?
- 变量初值:是否在获得确定的值前就使用了变量?
- 运算符:= / ==、<< / >>、% / / 有没有写反?
- 控制语句:else 或 for 后有没有多余分号?循环起点、终点、下标是否正确?
- 格式说明符:printf 的参数数量、类型和格式是否匹配?
- 数据类型:是否超出范围?是否进行了会改变数值的强制转换?
- 题意:要求求 f(x) 还是 f(f(x))?输出几个结果、保留几位小数?
可以临时输出中间变量,观察它从哪一步开始不符合预期;确认后再移除调试输出。错误记录应同时保留输入、预期结果、实际结果和对应代码。
窗口关闭与 system("pause")
system("pause"); 会调用系统命令。在 Windows 环境中,pause 命令常用于等待按键;它不是 C++ 程序必须使用的语句,也不是可移植的暂停方案。
在 C++ 中使用 system 应包含 <cstdlib>,可以写 std::system("pause");。这里仅解释曾经见过的写法,不把它加入每个示例。更直接的查看方式是在已经打开的终端中运行程序,结束后仍可查看输出。实际是否关闭取决于 VS Code 的启动方式。
红色波浪线不是运行结果
VS Code 的波浪线来自编辑器及相关扩展的代码检查。关掉它不等于代码没有错误,出现它也不等于程序已经运行失败。要分开查看编译器报错、终端运行结果与编辑器提示。
后续排错时,把代码和完整报错交给我处理即可,不需要自己修改网站程序。