功能:简单计算器实现两个整型变量的加减乘除
简化方式:
一、函数指针数组实现转移表进行简化
二、回调函数对Switch语句进行简化
一、函数指针数组实现转移表进行简化
利用函数指针数组,实现对加减乘除四个函数的调用
用if语句代替之前重冗余的Switch语句
int Add(int x, int y)
{
return x + y;
}
int Sub(int x, int y)
{
return x - y;
}
int Mul(int x, int y)
{
return x * y;
}
int Div(int x, int y)
{
return x / y;
}
void menu()
{
printf("**********************\n");
printf("*** 1.Add 2.Sub ***\n");
printf("*** 1.Mul 2.Div ***\n");
printf("*** 0 .exit ***\n");
printf("**********************\n");
}
int main()
{
int x = 0;
int y = 0;
int input = 0;
int(*pt[5])(x, y) = { 0,Add,Sub,Mul,Div };
do
{
menu();
printf("输入操作数 =>\n");
scanf("%d", &input);
if (input == 0)
{
printf("退出计算器");
}
else if (input >= 1 && input <= 4)
{
printf("输入两个操作数 => \n");
scanf("%d %d", &x, &y);
int ret = pt[input](x, y);
printf("输出结果 => %d\n", ret);
}
else
{
printf("输入错误,请重新输入!");
}
} while (input);
return 0;
}
二、回调函数对Switch语句进行简化
回调函数利用函数指针传过来的函数,从而进行运算,虽然还是利用了Switch语句,但是大大减少了之前每个case语句后面的重复内容,这些内容被整合到了回调函数内
//计算器-回调函数
void Add(int x, int y)
{
return x + y;
}
void Sub(int x, int y)
{
return x - y;
}
void Mul(int x, int y)
{
return x * y;
}
void Div(int x, int y)
{
return x / y;
}
void menu()
{
printf("*************************\n");
printf("*** 1.Add 2.Sub ***\n");
printf("*** 1.Mul 2.Div ***\n");
printf("*** 0.exit ***\n");
printf("*************************\n");
}
void calc(int(*p)(int,int))
{
int x = 0;
int y = 0;
int ret = 0;
printf("输入两个数字 =>\n");
scanf("%d %d", &x, &y);
ret = p(x, y);
printf("%d\n", ret);
}
int main()
{
int input = 0;
do
{
menu();
printf("输入一个操作数 => \n");
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出游戏!");
break;
case 1:
calc(Add);
break;
case 2:
calc(Sub);
break;
case 3:
calc(Mul);
break;
case 4:
calc(Div);
break;
}
} while (input);
return 0;
}
work hard ! !