C++ 错误检测与处理总结

章节回顾

范围蔓延(Scope creep)指项目的能力在开发过程中超出了最初立项或项目阶段开始时所确定的范围。

软件验证(Software verification)是通过测试确认软件在所有情况下是否按预期工作的过程。单元测试(unit test)是针对代码的一小部分(通常为一个函数或一次调用)在隔离环境中进行的测试,用以确保某一特定行为按预期发生。单元测试框架可帮助组织单元测试。集成测试(integration testing)则将若干单元整合后一起测试,以确保它们协同工作正常。

代码覆盖率(Code coverage)衡量测试过程中实际执行的源代码比例。语句覆盖率(Statement coverage)指已通过测试例执行到的程序语句所占百分比;分支覆盖率(Branch coverage)指已通过测试例执行到的分支所占百分比;循环覆盖率(Loop coverage,亦称 0、1、2 测试)要求:若存在循环,应验证其在迭代 0 次、1 次和 2 次时均能正确工作。

快乐路径(Happy path)指执行过程中未遇到任何错误的执行路径;悲伤路径(Sad path)则指出现错误或失败状态的执行路径。不可恢复错误(non-recoverable error,又称致命错误 fatal error)指严重到导致程序无法继续运行的错误。能够妥善处理错误情形的程序称为健壮的(robust)。

缓冲区(Buffer)是为临时存储数据而预留的一块内存区域,用于数据从一处移至另一处期间的暂存。

检查用户输入是否符合程序预期的过程称为输入验证(input validation)。

std::cerr 是一种输出流(与 std::cout 类似),专用于输出错误信息。

前置条件(Precondition)指在某段代码执行前必须始终为真的条件;不变式(Invariant)指在某个组件执行期间必须始终为真的条件;后置条件(Postcondition)指在某段代码执行后必须始终为真的条件。

断言(Assertion)是一类表达式,除非程序存在缺陷,否则其结果为真。在 C++ 中,运行时断言通常通过 assert 预处理器宏实现;断言一般在非调试版代码中被关闭。static_assert 是在编译期求值的断言。

断言应用于说明逻辑上绝不应发生的情况;错误处理则应用于应对确实可能发生的情况。

测验时间

问题 1

在上个章节的小结与测验中,我们实现了一个 Hi-Lo 猜数字游戏。

请更新你之前的解法,使其能够处理无效猜测(例如输入 ‘x’)、越界猜测(例如 0 或 101),或虽为有效数字但带有额外字符的猜测(例如 43x)。此外,当游戏询问玩家是否再玩一次时,也要处理用户输入多余字符的情况。

提示:编写一个独立函数,用于处理用户输入猜测(并包含相应的错误处理)。

关注公众号,回复"cpp-tutorial"

可领取价值199元的C++学习资料

公众号二维码

扫描上方二维码或搜索"cpp-tutorial"