MFC 计算器的问题,等号那块不能实现加减乘除 求思路和代码!

m_value_a = m_Eit;
//MessageBox(m_value_a,m_value_a,MB_OK);
UpdateData(1);
str = "+";
m_Eit =m_Eit+str;
m_value_a =m_Eit;

第1个回答  2014-07-15

这个很简单。

使用类向导对等号那个按钮,添加单击响应消息,在自动生成的xxDlg::OnClickedButton1() 

函数体中添加如下代码:

首先取得编辑框的字符串进行分析,如果是加号,则进行加法运算。

CString num; //从编辑框获取的字符串
CString num1,num2;  //获取的加数和被加数字符串
CString operat ; //运算符号
double num3; //运算结果
GetDlgItem(IDC_EDIT1)->GetWindowText(num);  //获取字符串
/*这里对num字符串进行拆分,获取num1,num2,operat
这个代码你自己写吧*/
if(operat=="+")
num3 = atof(num1) + atof(num2);  //转化成数字进行运算
else if(operat=="-")
num3 = atof(num1) - atof(num2);  //转化成数字进行运算
//else if 其他类似
char result[15];  //要输出的运算结果字符串
sprintf(result, "%.3f", num3);  //double转化成字符串
SetDlgItemText(IDC_EDIT1,result);  //输出结果

追问

关键是怎么获取加数和被加数呢???
就是这块不熟悉 求高手指点!

追答

我写的计算器没你的这么复杂,我弄了两个编辑框,第一个输入加数,第二个输入被加数,分别获取数据,处理起来非常方便。
你这个得对获取的字符串进行分析,比如
num[8] = "123+456";
double num1,num2;
char buf[100];
int i =0;
while( num[i]!='\0')
{
if(isdigit(str[i])||'.')
buf[i] = str[i];
else buf[i] = ' '; //不是数字或者小数点则用空格代替
i++;
}
buf[i] = '\0';
sscanf(buf,"%f%f ", &num1, &num2); //提取数字
没有测试,你试试看。

第2个回答  2014-07-15
你这个怎么实现的追问

我在屏幕上点击123点 加号 按钮它保存在编辑框中 然后再按另外一个加数 123+123
现在想求和 具体代码和思路!

相似回答