August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
Term的文法规则与Expression规则非常相似:
因此,它们的代码基本相同。下面是第一次尝试:
不幸的是,程序没有编译成功:编译器给出了错误信息——C++对浮点数没有定义模运算(%)。当我们回答6.3.5节列出的第五个问题时“我们应该允许输入表达式中出现浮点数吗?”,我们做出了肯定的回答“当然!”,实际上我们当时并没有全面考虑这个问题,从而陷入了功能蔓延的困境。这种情况经常会发生!那么我们应该如何处理呢?我们可以在运行时检查运算符%的两个运算数是否为整数,若不是则给出错误信息;或者简单地将操作符%排除在外,本书中就选择这种简单方法。我们可以随时将运算符%加进来(参见7.5节)。
在去掉运算符%以后,函数能够正常运行了,能够正确分析Term并进行计算。然而,有经验的程序员会注意到term()中存在一个不可接受的情况。如果我们输入2/0会发生什么情况?C++程序中零不能作为除数,否则计算机硬件会检测出这一情况,并终止程序,给出一些无用的错误信息。一个新手很难发现问题在哪里,所以,最好在程序中检查这种情况并给出一个恰当的错误提示。 ...