- 计算器
- 函数指针和回调函数实现
- 函数指针数组实现:
在没有学习函数指针和回调函数前,写的计算器难免都会有大量类似重复的代码
#include函数指针和回调函数实现void menu() { printf("*****************************n"); printf("****** 计算器 ******n"); printf("****** 1.加法 2.减法 ******n"); printf("****** 3.乘法 4.除法 ******n"); printf("****** 0.退出 ******n"); printf("*****************************n"); printf("请输入:"); } int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } int mul(int a, int b) { return a * b; } int div(int a, int b) { return a / b; } int main() { int x, y; int input = 1; int ret = 0; do { menu(); scanf("%d", &input); switch (input) { case 1: { printf("输入操作数:"); scanf("%d %d", &x, &y); ret = add(x, y); printf("ret = %dn", ret); break; } case 2: { printf("输入操作数:"); scanf("%d %d", &x, &y); ret = sub(x, y); printf("ret = %dn", ret); break; } case 3: { printf("输入操作数:"); scanf("%d %d", &x, &y); ret = mul(x, y); printf("ret = %dn", ret); break; } case 4: { printf("输入操作数:"); scanf("%d %d", &x, &y); ret = div(x, y); printf("ret = %dn", ret); break; } case 0: printf("退出程序n"); break; default: printf("选择错误n"); break; } } while (input); return 0; }
利用函数指针和回调函数,函数名就是函数的地址
先找到函数的地址所在,利用函数的功能进行计算,在返回计算的值
#include函数指针数组实现:void menu() { printf("*****************************n"); printf("****** 计算器 ******n"); printf("****** 1.加法 2.减法 ******n"); printf("****** 3.除法 4.乘法 ******n"); printf("****** 0.退出 ******n"); printf("*****************************n"); } 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 calc(int(*p)(int, int)) { int x = 0; int y = 0; int ret = 0; printf("请输入二个操作数:"); scanf("%d %d", &x, &y); ret = p(x, y); printf("%dn", ret); } int main() { int input = 0; do { menu(); printf("请选择:"); scanf("%d", &input); switch (input) { case 1: calc(Add); break; case 2: calc(Sub); break; case 3: calc(Div); break; case 4: calc(Mul); break; case 0: break; default: printf("输入错误,重新输入n"); break; } } while (input); return 0; }
函数指针数组是把函数的地址存放到函数指针数组里
通过输入的值进行判断,执行的是哪个函数,结果返回给变量
void menu()
{
printf("*****************************n");
printf("****** 计算器 ******n");
printf("****** 1.加法 2.减法 ******n");
printf("****** 3.乘法 4.除法 ******n");
printf("****** 0.退出 ******n");
printf("*****************************n");
printf("请输入:");
}
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;
}
int main()
{
int input = 1;
int x = 0, y = 0;
int ret = 0;
int (*p[])(int, int) = { 0,Add,Sub,Mul,Div };
while (input)
{
menu();
scanf("%d", &input);
if (input == 0)
{
printf("退出计算器n");
break;
}
else if (input >= 1 && input <= 4)
{
printf("请输入操作数:");
scanf("%d %d", &x, &y);
ret = p[input](x,y);
printf("%dn", ret);
}
else
{
printf("输入错误n");
break;
}
}
return 0;
}



