上一节讲了用函数指针数组实现一个简易的计算器,这节讲一下用回调函数实现计算器
不知道函数指针怎么实现的可以去看我的博客
- 我们先看一段实现计算器的代码
很简单并且容易理解,但是代码有点过于冗余,比如每次输入输出和调用函数都在代码中出现了很多遍,如果使用回调函数就可以轻松解决这一点
先看一下回调函数的定义
看不懂??很正常 且听慢慢分析
图中的代码反出现,现在考虑即将他们放在一个函数里实现,相信很多人都有过这样的想法,
但是呢,中间的每个里面调用的函数又不同,所以有点行不通,让我们试试回调函数的方法
2 .回调:但自己却不使用,传给别人用
如果能有一个函数,里面包含输入和输出函数,并且每次向这个函数传一个函数,他可以再传出去,就解决了每次实现不同运算的想法,看代码
例如这次传出去一个Add加法函数
用这个函数接收,这个函数在return 的时候再调用传上来的函数,就可以实现这个想法
pf()的调用正是Add函数,如传上来的是其他的例如Sub()减法,或者Div()除法的话也可以调用
这样,计算器就做好了
点赞取代码殴
代码奉上
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void menu()
{
//分别为加法、减法、乘法、除法还有退出的选项
printf("****************************\n");
printf("** 1.Add********* 2.Sub ****\n");
printf("** 3.Mul**********4.Div*****\n");
printf("*********0.exit*************\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;
}
int Calc(int (*pf)(int, int))
{
int x=0, y=0;
printf("请输入两个操作数:\n");
scanf("%d%d", &x, &y);
return pf(x, y);
}
int main()
{
int option = 0;//定义选项
int x = 0, y = 0;
int ret = 0;//定义结果
do
{
menu();
scanf("%d",&option);
switch (option)
{
case 1:
{
ret = Calc(Add);
printf("%d\n", ret);
break;
}
case 2:
{
ret = Calc(Sub);
printf("%d\n", ret);
break;
}
case 3:
{
ret = Calc(Mul);
printf("%d\n", ret);
break;
}
case 4:
{
ret = Calc(Div);
printf("%d\n", ret);
break;
}
case 0:
{
printf("退出计算器程序\n");
break;
}
default:
{
printf("输入错误,请重新输入\n");
}
}
} while (option);
return 0;
}
新博主经常在线,欢迎问题及讨论C语言,也欢迎大佬指点,有建议欢迎评论区