mooc自学网址:
https://www.icourse163.org/learn/CUC-1450328379?tid=1450742649#/learn/content?type=detail&id=1216695336&sm=1
第三章
第三个小游戏是“小型计算器”,即根据用户输入进行简单的四则运算。
(1)还是先创建一个新的桌面应用程序项目,命名为“Expression”。
(2)定义需要用到的全局变量,包括两个数字、字符计数器、操作符、临时存储区、计算结果、是否有结果判断、显示输出的字符串。
float x=0,y=0;
int num=0; //数组下标
char oper;
char input[64];
float result;
int bResult=0;
WCHAR str[64];
(3)添加交互。
case WM_CHAR:
InvalidateRect(hWnd,NULL,TRUE); //刷新页面
if(wParam==VK_RETRUN) //如果接收到的是回车键,则进行重置操作
{
num=0; //数组下标归0
bResult=0; //结果判断变0
memset(input,'/0',64*sizeof(char)); //清空字符串组
}
else if(bResult) //若结果不存在,则跳出
break;
if(wParam=='.'||(wParam>='0'&&wParam<='9')) //接收到的是小数点或数字则加入到数组中
{
input[num++]=wParam;
}
else if(wParam=='+'||wParam=='-'||wParam=='*'||wParam=='\') //接收到的是算数符,则空开加入数组
{
input[num++]=' ';
input[num++]=wParam;
input[num++]=' ';
}
else if(wParam =='=') //接收到的是等于号,则显示并输出数组
{
input[num++]=' ';
sscanf_s(input,"%f %c %f",&x,&oper,1,&y); //依次输出数字、运算符(中间的字符格式要加个1表示字符个数,不加会出错)
if(oper=='+') //根据不同运算符,输出不同的结果给result
result=x+y;
else if(oper=='-')
result=x-y;
else if(oper=='*')
result=x*y;
else if(oper=='\')
result=x/y;
input[num++]='=';
bResult=1; //表示结果存在
}
break;
(4)绘图代码:
TextOut(hdc,0,0,L"请输入计算式”,6);
MultiByteToWideChar(CP_THREAD_ACP,MB_USEGLYPHCHARS,input,64,str,64); //将一个字符串映射到一个宽字符串上(输出和输入一样)
TextOut(hdc,0,20,str,wcslen(str)); //输出字符串组
if(bResult) //如果结果存在,新定义一个字符串组进行输出
{
WCHAR str2[16];
swprintf(str2,16,L"%f",result);
TextOut(hdc,0,40,str2,wcslen(str2));
}
EndPaint(hWnd,&ps);
}
break;
(5)课后拓展:
`