提示:MFC实现计算器系列,后一篇均在前一篇基础上改进
之前的MFC计算器02是很简陋的,随便输一点,程序就崩了,这显然不大行,这次做两个工作,以及思考一个问题:
1.添加清零、删除功能;
2.增加程序的健壮性,就算用户瞎输,也要保证程序不会崩溃,
3.程序冗余问题?
---->>>针对第二点,扩展开来,有以下要求:
a.被除数为0的控制;
b.连续按运算符的控制;
c.运算符按完直接按等号的处理?
d.表达式输完后,连续按等号?参考Microsoft计算器
e.计算结果怎么显示?整数,小数,几位小数?
f.一次计算完毕后,继续点击按钮,怎么响应下一次计算?
g.开始就按等号怎么处理?
h.开头就按运算符怎么处理?
---->>>针对每一个问题做出解答:解决问题的思路:
a.被除数为0的控制:
原先的想法是检查除号后的输入,即控制除号后面的第一个字符不能是0,这显然不行啊(虽然没写小数点的时候我就是这样解决的,简单快捷,可是加了小数点后显然不太行,就改了,这里就直接摒弃这个思路算了),解决方案是检查两个运算符之间的数据,当后一个运算符按下以后,就去检查这两个运算符之间的数据,把字符转化为double/int数据,不允许数据为0且前一个运算符是/的情况存在,此时弹出对话框,告知用户,被除数不能为0,同时最后输入的运算符不计入表达式字串中,问题解决!
b.连续按运算符的控制:
问题简单,直接判断前面一个字符是不是运算符(+-*/),是那就直接替换它,不是,那就正常加上,问题解决!
c.运算符按完直接按等号的处理:
在等号事件处理程序中,加入判断,检查前一个字符是否是运算符,然后弹出弹窗,告知用户,并且这个等号不计入表达式,问题解决!
d.表达式输完后,连续按等号?
Microsoft的连续等号,是把表达式计算结果和(表达式中最后的运算符和数据)连接起来,构成新表达式,再次计算。比如7-2=5,当此时再次按下等号,将计算(构成表达式)5-2,第三次按下等号则计算表达式即,5-2=3;若继续按等号,则以此继续-2,问题思路清晰,判断等号前面是否为等号,是,则构建新的表达式,则此时又成为了正常的表达式,可供运算,问题解决!
e.计算结果怎么显示?整数,小数,几位小数?
固定2位 或者 6 位小数,(一直解决不了,实际上,以至于我最后没能解决
f.一次计算完毕后,继续点击按钮,怎么响应下一次计算?
一次计算完毕之后,把计算结果给表达式,然后等待下一次表达式构建完成。(有问题的,虽然按运算符可以直接利用上次结果计算,但是按数字会导致直接在上一次结果后面直接加上字符,不太符合正常计算习惯)后续有过改进,此处就这样了,问题解决!-- 解决一半
g.开始就按等号怎么处理?
在等号响应函数里判断,是否是开局就按等号,是,直接强制清零,重开,问题解决!
h.开头就按运算符怎么处理?
简单,判断是否是开头,是,就在运算符前面强制加0,构成 0(op)__模式即可(op = +-*/),问题解决!
添加清零、删除功能:
问题简单,清零直接把数据全部还原,初始化操作;删除则干掉表达式中最后一个字符,然后再次显示出来就行,一样,为这两个按钮添加事件处理程序。
那些按钮的事件处理程序中的代码也太像了,完全是可以构建函数做调用的,减少代码冗余。
代码就不发了,毕竟没有当前版本的代码了,这毕竟只是编写中的一个阶段,当初也没有存下来。MFC实现计算器04之小数计算及键盘输入
2022-08-10(0718)