【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
原创粉丝点击