1.我们先看一段实现计算器的代码
很简单并且容易理解,但是代码有点过于冗余,比如每次输入输出和调用函数都在代码中出现了很多遍,如果使用回调函数就可以轻松解决这一点
先看一下回调函数的定义
看不懂??很正常 且听慢慢分析
图中的代码反出现,现在考虑即将他们放在一个函数里实现,相信很多人都有过这样的想法,
但是呢,中间的每个里面调用的函数又不同,所以有点行不通,让我们试试回调函数的方法
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; }