void CMFCApplication5Dlg::OnBnClickedAdd()
{
SaveValue1();
m_iSign = 0;
// TODO: 在此添加控件通知处理程序代码
}
void CMFCApplication5Dlg::OnBnClickedDivide()
{
SaveValue1();
m_iSign = 3;
// TODO: 在此添加控件通知处理程序代码
}
void CMFCApplication5Dlg::SaveValue1()
{
UpdateData(TRUE);
m_fNumber1 = atof(m_str); //编辑框显示第一个操作数
m_str = ""; //做完上步操作后将编辑框设置为空
UpdateData(FALSE);
}
//计算,涉及到两个操作数,按下“=”时执行。包括“+”,“-”“×”“÷”“指数”
void CMFCApplication5Dlg::Calculator()
{
UpdateData(TRUE);
m_fNumber2 = atof(m_str); //获得第二个操作数并显示在编辑框中
double f = 0.0f; //f必须初始化,用于保留计算结果
switch (m_iSign) //根据m_iSign标志跳转
{
case 0:
f = m_fNumber1 + m_fNumber2;//加
break;
case 1:
f = m_fNumber1 - m_fNumber2;//减
break;
case 2:
f = m_fNumber1 * m_fNumber2;//乘
break;
case 3:
if (m_fNumber2 == 0.0f) //除法中分母不能为0,为0时需要进行如下操作
{
MessageBox("除数不能为0!"); //弹出提示消息框
f = m_fNumber1;
//除数为0时直接将第一个操作数赋给结果,表示第二个操作数不算,直接继续下一步操作
}
else
{
f = m_fNumber1 / m_fNumber2;//除
}
break;
case 6:
f = pow(m_fNumber1, m_fNumber2); //指数
break;
default:
break;
}
参考GPT和自己的思路:
根据提供的代码,加法和除法都需要先调用SaveValue1()函数来保存第一个操作数,然后才能执行计算操作。因此,可能出错的原因是在保存第一个操作数时出现了问题,或者是在计算时操作数的值不正确。
如果你能提供更具体的错误描述或代码片段,我可以更详细地帮助你确定问题的原因。