【C/C++】用回调函数实现计算器
来源:互联网 发布:bigworld引擎全套源码 编辑:程序博客网 时间:2024/06/05 06:36
一、问题概述
用C语言实现一个简易计算器,可以用来实现加减乘除的功能
名词解释:
函数指针:一个指针,用于指向一个函数
函数指针数组:是一个数组,里面存放多个函数指针
回调函数:一个函数,若参数中有函数指针,那么这个函数便是回调函数
二、问题分析
这个问题大可用switch,case语句实现
但是这里我们用一种比较高大上的方法
利用函数指针数组
以及回调函数
思路:
(1)先把加减乘数各写成一个函数
注意:类型与返回值必须相同
(2)用函数指针数组,将四个运算函数存到该数组里
通过调用该数组,根据函数地址来调用了该函数
三、代码实现
(1)函数指针数组
代码块:
#include<stdio.h>//将运算的四个函数写出来void Add(int x,int y){printf("%d\n",x+y);}void Sub(int x,int y){printf("%d\n",x-y);}void Mul(int x,int y){printf("%d\n",x*y);}void Div(int x,int y){printf("%d\n",x/y);}void calculate(int option){void (*pfun[5])(int ,int) = {0,Add,Sub,Mul,Div};//定义了一个函数指针数组pfun,指向了Add,Sub,Mul,Div函数int x = 0;int y = 0;printf("请输入两个操作数:>");//进入操作数的选择scanf("%d%d",&x,&y);if((option==4)&&(y==0))//当选项是除法,并且第二个操作数为0的时候报错{printf("参数有误!\n");return ;//直接返回}pfun[option](x,y);//通过 函数指针数组 进行 函数的调用}void menu()//菜单函数{printf("1.add2.sub\n");printf("3.mul4.div\n");printf("0.exit\n");}int main(){int option = 0;while(1){menu();printf("请输入:>");scanf("%d",&option);if(option>=1&&option<=4){calculate(option);}else if(option==0){break;}else{continue;}}return 0;}
(2)回调函数
代码块:
#include<stdio.h>void Add(int x,int y){printf("%d\n",x+y);}void Sub(int x,int y){printf("%d\n",x-y);}void Mul(int x,int y){printf("%d\n",x*y);}void Div(int x,int y){printf("%d\n",x/y);}void calculate(void (*pfun)(int,int))//由于参数中是一个函数指针,因此这是一个回调函数{int x = 0;int y = 0;printf("请输入两个操作数:>");scanf("%d%d",&x,&y);if((pfun==Div)&&(y==0)){printf("参数有误!\n");return ;}pfun(x,y);//通过函数指针来回调 指向的函数} void menu()//菜单函数{printf("1.add2.sub\n");printf("3.mul4.div\n");printf("0.exit\n");}int main(){void (*pfun[5])(int ,int) = {0,Add,Sub,Mul,Div};int option = 0;while(1){menu();printf("请输入:>");scanf("%d",&option);if(option>=1&&option<=4){calculate(pfun[option]);}else if(option==0){break;}else{continue;}}return 0;}
1 0
- 【C/C++】用回调函数实现计算器
- 回调函数 c实现
- 回调函数实现例子-c语言
- c语言实现回调函数
- C 回调函数
- 【c++】回调函数
- C 回调函数
- C回调函数
- [C] 回调函数
- C 回调函数
- C回调函数
- [C++]回调函数
- c/c++:回调函数
- C /C ++ 回调函数
- 理解C回调函数
- C语言---回调函数
- c语言回调函数
- c中的回调函数
- [WinForm]ListView行高的设置
- MongoDB 安装成为Windows服务
- mysql数据库导出表的数据字典
- 打开mxd和两控件复制
- 在TOMCAT中部署war
- 【C/C++】用回调函数实现计算器
- 基于RNN神经网络和BPTT算法实现的简单二进制计数器
- GDB 调试 C++ 程序 core dump
- 第14课Scala集合上的函数式编程实战及Spark源码鉴赏
- Arrays.asList方法
- 二次实践自定义标题栏
- JavaScript笔记_1
- 烧写Uboot到SD卡,,打开 sd_mbr.bat 失败,打开 SD-bl1-8k.bin 失败,failed to open'SD-bl1-8k.bin',
- PHP购物车类Cart.class.php定义与用法示例