从main入口,实例化栈的对象并初始化,调用求值函数Solution(),所求得结果作为返回值输出。
Solution()函数简要流程:
将#入栈,初始化各个变量,开始输入表达式,输入数字时入opnd,运算符时入optr,否则提示出错。
运算符时入optr时先调用Precede()判断optr栈顶元素和当前输入运算符的优先级,
若返回<时入栈,返回>时弹出上一个运算符合上两个数,调用Operate(a,op,b)运算并返回结果入栈;返回=时说明运算结束,出栈并结束;返回R、P、L时对应提示相应的出错信息。
容错处理考虑到了很多种可能的错误:
1.直接输入回车
|
2.输入其他字符
|
3.不输入#
|
4.输入多个小数点
|
5.输入不匹配的括号
|
6.连续输入运算符
|
7.输入小数时直接输入小数点
|
8.表达式开始输入运算符
|
测试数据
这个程序从设计到完成用了将近3天的时间,感觉自己能力提高了,上一个程序写了一个星期左右,这次有一定的提高。
在这个程序里我{dy}次用了模板,感觉用法很容易,就是会显得有点乱。设计多位整数和小数的算法的时候没有写流程图,直接就写,一边写一边想,用了2个小时的时间,这个功能是放在{zh1}才加进去的。
弄明白了getchar()这个函数是如何运作的:{dy}次调用getchar(),输入字符串,存入缓冲区,指针指向缓冲区的{dy}个位置并取出来;下一次调用getchar()指针后移一位,也就是取出下一位。掌握了构造函数和析构函数的使用。
部分源码下载:
已投稿到: |
|
---|