计算器的实现(回调函数)

上一节讲了用函数指针数组实现一个简易的计算器,这节讲一下用回调函数实现计算器

不知道函数指针怎么实现的可以去看我的博客

  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;
}

新博主经常在线,欢迎问题及讨论C语言,也欢迎大佬指点,有建议欢迎评论区

  • 15
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值