利用MFC编写一个简单的四则运算器。程序基于Dialog,用户提供2个操作数和一个操作符(+,-,*,/);程序进行计算并显示运算结果,显示结果的控件不接收用户输入。
运行窗口
计算结果的整数后带小数点的情况
计算结果的整数后不带小数点的情况
实验分析与总结:
1) 调用UpdateData()函数时要特别注意拼写,否则很容易出现“error C2065: 'UpdataData' : undeclared identifier”;
2) UpdateData()函数是用来刷新数据的。UpdateData(TRUE) :刷新控件的值到对应的变量;UpdateData(FALSE):拷贝变量值到控件显示;
3)如果编辑框风格选中了Number,则只能输入整型数据;
4)switch语句中,case后面可以是整型或单引号内加字符,注意是单引号而不是双引号;
5)gcvt函数的功能是把浮点数转换成字符串,将把十进制整型数据用gcvt函数转换得到的字符串拷贝到控件,显示出来的整数后面会带有小数点,那是因为小数点也是字符;为了去掉整数后面的小数点,可以在gcvt函数所在的语句后面加上“int i=strlen(cBuffer)-1; if(cBuffer[i]=='.')cBuffer[i]=0;”把小数点去掉;
6)GetWindowText函数原型:Int GetWindowText(HWND hWnd,LPTSTR lpString,Int nMaxCount);其中IpString是指向接收文本的缓冲区的指针,本题中需要调用该函数将四则运算符号拷贝到缓冲区,就要用“&”取char变量地址作为指针,否则会出现错误。
OnButtonCalculate的函数代码如下:
void CWeek7Dlg::OnButtonCalculate()
{
char item1[10],item2[10],op;
double dfitem1, dfitem2, dfresult;
char cBuffer[10];
m_ITEM1_EDIT.GetWindowText(item1,10);
m_ITEM2_EDIT.GetWindowText(item2,10);
m_OPSIGN_EDIT.GetWindowText(&op,10);
dfitem1=atof((LPCTSTR)item1);
dfitem2=atof((LPCTSTR)item2);
switch(op)
{
case '+': dfresult=dfitem1+dfitem2;break;
case '-': dfresult=dfitem1-dfitem2;break;
case '*': dfresult=dfitem1*dfitem2;break;
case '/': dfresult=dfitem1/dfitem2;break;
default:break;
}
_gcvt(dfresult,10,cBuffer);
int i=strlen(cBuffer)-1;
if(cBuffer[i]=='.')cBuffer[i]=0;
m_RESULT_EDIT=(LPCTSTR)cBuffer;
UpdateData(FALSE);
}
OnButtonExit的函数代码如下:
void CWeek7Dlg::OnButtonExit()
{
OnOK();
}