200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 计算器(利用回调函数/函数指针数组实现) C语言

计算器(利用回调函数/函数指针数组实现) C语言

时间:2023-02-12 00:54:43

相关推荐

计算器(利用回调函数/函数指针数组实现) C语言

玩点不一样的

一、利用回调函数实现

#include <stdio.h>void menu(){printf("************ 计算器 **********\n");printf("************* 1、add **********\n");printf("************* 2、sub **********\n");printf("************* 3、mul **********\n");printf("************* 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;int y = 0;printf("请输入两个操作数:>");scanf_s("%d %d", &x, &y);return pf(x, y);}int main(){int input = 0;do{menu();int ret = 0;printf("请选择:>");scanf_s("%d", &input);switch(input){case 1:ret = Calc(Add);printf("ret=%d\n", ret);break;case 2:ret = Calc(Sub);printf("ret=%d\n", ret);break;case 3:ret = Calc(Mul);printf("ret=%d\n", ret);break;case 4:ret = Calc(Div);printf("ret=%d\n", ret);break;case 0:printf("退出程序\n");break;default:printf("选择错误,请重新选择:>\n");break;}} while (input);return 0;}

二、利用函数指针数组实现

#include <stdio.h>void menu(){printf("************ 计算器 **********\n");printf("************* 1、add **********\n");printf("************* 2、sub **********\n");printf("************* 3、mul **********\n");printf("************* 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 main(){int input = 0;do{menu();int (*pfarr[5])(int, int) = { NULL,Add,Sub,Mul,Div };//利用函数指针数组//放NULL空指针是为了,把下标和选项对上,1是Add,2是Sub……int x = 0;int y = 0;int ret = 0;printf("请选择:>");scanf_s("%d", &input);if (input >= 1 && input <= 4){printf("请输入两个操作数:>");scanf_s("%d %d", &x, &y);ret = (pfarr[input])(x, y);//利用函数指针调用函数的三种形式//(*pf)(x,y);//pf(x,y);//function(x,y);printf("ret=%d\n", ret);}else if (input == 0){printf("退出程序\n");break;}else{printf("选择错误,请重新选择:>\n");}} while (input);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。