介绍
小编这次要给大家分享的是c++有限状态机如何实现计算器小程序,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。
<强>实现的功能强>
- <李>支持整数,小数输入李> <>李支持+ - */四则运算李> <>李CE清除当前操作数李> <李> C清除所有,回到初始状态李> <>李回显操作数和结果
李,>
<强> HSM状态图强>
计算器可以分为七种状态:首先,Operand_1, Negate_1,运营商Operand_2, Negate_2,错误。其中开始,Operand_1, Operand_1状态又分了几种子状态。下面简要的介绍下状态状态转换的过程:
- <李>启动软件,进入开始状态李> <李>当用户点击1 - 9,0,点按钮,软件进入Operand_1状态。李> <李>当用户点击+,-,*,/按钮,软件进入运营商状态。李> <李>此时当用户再次点击1 - 9,0,点按钮,软件进入Operand_2状态。李> <李>如果用户点击=按钮,软件就进入了开始状态。李> <李>如果此时进行的是除法运算且除数为0,软件进入错误状态,用户只有点击C按钮才可以跳出。
李,>
在实际开发的过程中,我们只需要关心现在程序处在什么状态,可以进行什么样的操作,然后就是状态转换的条件要处理下。
<强>代码片段强>
下面是CalculatorDlg。cpp中的一段代码,我们首先要获得当前的状态,然后进行相应的操作,操作完成之后设置好对应的状态。
空白CalculatorDlg:: enterOperation(计算器::CalcOp歌剧院) { 如果(m_calculator.getCurrentState()==计算器:CalcState::错误) { 返回; } 如果(m_calculator.getCurrentState()==计算器:CalcState::开始| | m_calculator.getCurrentState()==计算器:CalcState: Negate_1 | | m_calculator.getCurrentState()==计算器:CalcState:: Operand_1) { m_calculator.setOperand_1 (_wtof (m_output)); } else if (m_calculator.getCurrentState()==计算器::CalcState:: Operand_2 | | m_calculator.getCurrentState()==计算器:CalcState:: Negate_2) { m_calculator.setOperand_2 (_wtof (m_output)); UpdateData(真正的); std:: stringstream党卫军; 党卫军& lt; & lt;m_calculator.getResult (); .c_str m_output=ss.str () (); UpdateData(假); m_calculator.setCurrentState(计算器::CalcState::开始); m_calculator.setOperand_1 (m_calculator.getResult ()); } m_calculator.setCurrentState(计算器::CalcState::操作符); m_calculator.setOperator (③); }
运行效果展示
看完这篇关于c++有限状态机如何实现计算器小程序的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。