回调函数实现四则运算器(可增添功能)

简介: 本文讲解:回调函数实现四则运算器(可增添功能)

  前言

你好,我是程序猿爱打拳。在我的上篇博文中我们学到了函数指针以及函数指针数组的用法,这篇博文我将延申上一篇博客来讲解回调函数的用法。当然,如果你还不懂函数指针和函数指针数组的用法可以观看这篇文章。


回调函数,是在函数指针的基础上进行修改的。什么意思呢:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应函数指针的用法。回调函数switch语句case语句实现四则运算器:

#include<stdio.h>
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;
}
void Menu()
{
  printf("========================\n");
  printf("====  1.Add  2.Sub  ====\n");
  printf("====  3.Mul  4.Div  ====\n");
  printf("====  0.Exit        ====\n");
  printf("========================\n");
}
void calc(int (*p)(int,int))
{
  int x = 0;
  int y = 0;
  int ret = 0;
  printf("请输入两个整数:>");
  scanf("%d %d", &x, &y);
  ret = (*p)(x, y);
  printf("结果为:%d\n", ret);
}
int main()
{
  int input = 0;
  do
  {
    Menu();
    printf("请输入你的选项:>");
    scanf("%d", &input);
    switch (input)
    {
    case 0:
      printf("你已退出程序!");
      break;
    case 1:
      calc(Add);
      break;
    case 2:
      calc(Sub);
      break;
    case 3:
      calc(Mul);
      break;
    case 4:
      calc(Div);
      break;
    default:
      printf("请输入正确的选项!\n");
    }
  } while (input);
  return 0;
}

image.gif

实现效果:

image.gif编辑

相关文章
|
4月前
|
图形学 开发者 UED
Unity游戏开发必备技巧:深度解析事件系统运用之道,从生命周期回调到自定义事件,打造高效逻辑与流畅交互的全方位指南
【8月更文挑战第31天】在游戏开发中,事件系统是连接游戏逻辑与用户交互的关键。Unity提供了多种机制处理事件,如MonoBehaviour生命周期回调、事件系统组件及自定义事件。本文介绍如何有效利用这些机制,包括创建自定义事件和使用Unity内置事件系统提升游戏体验。通过合理安排代码执行时机,如在Awake、Start等方法中初始化组件,以及使用委托和事件处理复杂逻辑,可以使游戏更加高效且逻辑清晰。掌握这些技巧有助于开发者更好地应对游戏开发挑战。
178 0
|
5月前
|
开发者 安全 UED
JSF事件监听器:解锁动态界面的秘密武器,你真的知道如何驾驭它吗?
【8月更文挑战第31天】在构建动态用户界面时,事件监听器是实现组件间通信和响应用户操作的关键机制。JavaServer Faces (JSF) 提供了完整的事件模型,通过自定义事件监听器扩展组件行为。本文详细介绍如何在 JSF 应用中创建和使用事件监听器,提升应用的交互性和响应能力。
46 0
|
8月前
|
测试技术 数据库 C++
Qt C++拖放事件探索之旅:多方法深入解析
Qt C++拖放事件探索之旅:多方法深入解析
620 1
|
JavaScript
vue模板语法下集->事件处理器,表单的综合案例,组件通信
vue模板语法下集->事件处理器,表单的综合案例,组件通信
55 0
[虚幻引擎插件介绍] DTGlobalEvent 蓝图全局事件, Actor, UMG 相互回调,自由回调通知事件函数,支持自定义参数。
本插件可以在虚幻的蓝图 Actor, Obiect,UMG 里面指定绑定和执行消息,可带自定义参数。 参数支持 Bool,Byte,Int,Int64,Float,Name,String,Text,Vector,Rotator,Transform,Object,Actor。
103 0
|
JavaScript 小程序 开发者
【微信小程序】冒泡事件与非冒泡事件、将文章数据从业务中分离、wxml的模块化
冒泡事件是指某个组件上的时间被触发后,事件还会向父级元素传递;父级元素还会继续向父级的父级传递,一直到页面的顶级元素。而非冒泡事件则不会向父级元素传递事件。
|
前端开发 JavaScript UED
前端祖传三件套JavaScript的DOM之事件的各种具体事件类型的键盘/文本
在前端开发中,JavaScript 中的 DOM 事件机制提供了丰富的功能和灵活的方式来处理各种事件。本文将介绍 JavaScript 中常见的键盘/文本事件类型,包括输入事件、按键事件和复制/剪切/粘贴事件。
148 0
|
Android开发
Flutter(十三)——事件处理:手势识别与事件通知
Flutter(十三)——事件处理:手势识别与事件通知
366 2
|
开发工具 C++
C++音乐播放按钮的封装过程详解
1、准备工作:音乐、开发工具VS stdio及图形库工具 2、设计思路:先加载音乐,再通过点击不同的按钮执行不同的操作(播放音乐,暂停音乐、继续播放、结束播放) 绘制按钮我们通过一个按钮button类来操作,这样数据会存在一些必要的访问数据权限,并可以将多个函数声明写在同一个类中,调用只需使用 " 类名.函数名 “即可调用里面的函数

热门文章

最新文章

下一篇
开通oss服务