您好,登錄后才能下訂單哦!
小編這次要給大家分享的是C++有限狀態機如何實現計算器小程序,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
實現的功能
HSM狀態圖
計算器可以分為七種狀態:Start、Operand_1、Negate_1、Operator、Operand_2、Negate_2、Error。其中Start、Operand_1、Operand_1狀態又分了幾種子狀態。 下面簡要的介紹下狀態狀態轉換的過程:
在實際開發的過程中,我們只需要關心現在程序處在什么狀態,可以進行什么樣的操作。然后就是狀態轉換的條件要處理下。
代碼片段
下面是CalculatorDlg.cpp中的一段代碼,我們首先要獲得當前的狀態,然后進行相應的操作,操作完成之后設置好對應的狀態。
void CalculatorDlg::enterOperation(Calculator::CalcOp oper) { if (m_calculator.getCurrentState() == Calculator::CalcState::Error) { return; } if (m_calculator.getCurrentState() == Calculator::CalcState::Start || m_calculator.getCurrentState() == Calculator::CalcState::Negate_1 || m_calculator.getCurrentState() == Calculator::CalcState::Operand_1) { m_calculator.setOperand_1(_wtof(m_output)); } else if (m_calculator.getCurrentState() == Calculator::CalcState::Operand_2 || m_calculator.getCurrentState() == Calculator::CalcState::Negate_2) { m_calculator.setOperand_2(_wtof(m_output)); UpdateData(TRUE); std::stringstream ss; ss << m_calculator.getResult(); m_output = ss.str().c_str(); UpdateData(FALSE); m_calculator.setCurrentState(Calculator::CalcState::Start); m_calculator.setOperand_1(m_calculator.getResult()); } m_calculator.setCurrentState(Calculator::CalcState::Operator); m_calculator.setOperator(oper); }
運行效果展示
看完這篇關于C++有限狀態機如何實現計算器小程序的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。