August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
为什么程序遇到错误就结束运行呢?当初我们选择策略时,这种方式确实看起来简单明了。但是,为什么不让程序给出一个错误提示信息,然后继续运行呢?毕竟,我们常常会出一些小的输入错误,而这并不意味着我们打算结束程序的运行。因此,我们下面尝试为程序加入错误恢复能力。这意味着,程序必须能够捕获异常,并在清理遗留故障后继续运行。
在现在的计算器程序中,所有错误都表示为异常,由main()函数处理。如果我们希望加入错误恢复功能,必须让calculate()函数捕获异常,并在计算下一个表达式之前清理故障。
我们简单地将while循环代码块放在try代码块中,try代码块在捕获异常后给出错误提示信息,并清理遗留故障。在此之后,程序如往常一样继续运行。
“清理遗留故障”的必要性何在?本质上来说,在错误处理之后准备好继续进行下面的运算,就意味着与错误相关的程序数据都已清理,所有数据都已处于良好的、可预测的状态。在计算器程序中,Token_stream是唯一在函数之外定义的数据。因此,我们所要做的就是清理与错误表达式相关的所有单词,避免它们弄乱下一个表达式。例如:
将会引发一个错误,即第二个+触发异常之后,Token_stream和cin的缓冲区中仍然保存着2*3;4+5;。对此有两种处理方式: ...