August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
现在,我们准备测试程序的第二个版本。计算器程序(包含Token_stream)的第二个版本可在calculator01.cpp获得。运行并试验输入2并换行以后,程序没有输出,再次换行程序仍然没有输出。输入3并换行以后程序输出2,输入2+2并换行以后程序输出结果3。此时屏幕上显示:
由此可知,也许在expression()和term()中使用putback()并没有解决问题。下面做另一个测试:
程序给出了正确的结果!但最后一个结果(6)却不见了。这里仍然存在一个单词预读方面的问题。但是,这次的问题不是我们的程序“吃掉”了字符,而是它不能返回表达式的运算结果,除非再输入后续表达式。也就是说,一个表达式的结果不是被立即输出,而被推迟到程序读入下一个表达式的第一个单词以后才输出。不幸的是,只有在输入下一个表达式并回车以后,程序才能读到那个单词。程序本身没有错误,只是它的输出有些延迟。
如何改进这个问题?一个很明显的方法是加入一个“输出命令”。我们使用分号标识一个表达式的结束并触发结果的输出。另外,我们再增加一个“退出命令”,实现程序的正常退出。字符q(表示“quit”-退出)用于表示退出命令是很恰当的。在原来版本的main()函数中,有:
我们把它改成下面这样,可能有点复杂,但却更加实用: ...