当前位置:网站首页>Using C language to complete a simple calculator (function pointer array and callback function)
Using C language to complete a simple calculator (function pointer array and callback function)
2022-07-06 08:47:00 【C tie Zhu】
This article mainly uses the method of function pointer array and callback function to write a simple calculator .
Function pointer method
#include <stdio.h>
void menu() // Print menu functions
{
printf("*******************\n");
printf("****1.add 2.sub****\n");
printf("****3.mul 4.div****\n");
printf("***** 0.exit ******\n");
printf("*******************\n");
}
int ADD(int x, int y) // Addition function
{
return x + y;
}
int SUB(int x, int y) // Subtraction function
{
return x - y;
}
int MUL(int x, int y) // Multiplication function
{
return x * y;
}
int DIV(int x, int y) // Division function
{
return x / y;
}
int main()
{
int a, b, ret,input;
int(*p[5])(int, int) = { 0,ADD,SUB,MUL,DIV };// Define an array of function pointers , Pass in the addresses of the four functions ,
do // In order to match the subscript of the calling function with the input value , Let's open up another space in front .
{
menu();
printf(" Please enter the option :\n");
scanf("%d", &input);
if (input == 0)
printf(" Exit calculator \n");
else if (input > 0 && input < 5)
{
printf(" Please enter two operands :\n");
scanf("%d%d", &a, &b);
ret = p[input](a, b); // Call the function through the pointer in the function pointer array .
printf(" The calculation result is :%d\n", ret);
}
else
printf(" Input error , Please re-enter !\n");
} while (input);
return 0;
}
When writing this code , We must first think about how to implement this program , First we need to print the menu of this calculator , Then according to the input number to determine what operation we do , After the calculation, we need to go back and choose again , And then calculate , repeat , So we can write one first do……while loop , Then enter the option , According to the input content, write what the program will execute , You can use it if Statement to implement , And when we choose to calculate , First, we need to input the two operands to be calculated , And then calculate , We found that , The parameter types and return types of these four functions are the same , Then we can create an array of function pointers , Put the addresses of the four functions in , You can then dereference to use these functions , Then we will write some measures if the input is wrong , It completes such a function .
Callback function method
#include <stdio.h>
void menu() // Print menu functions
{
printf("*******************\n");
printf("****1.add 2.sub****\n");
printf("****3.mul 4.div****\n");
printf("***** 0.exit ******\n");
printf("*******************\n");
}
int ADD(int x, int y) // Addition function
{
return x + y;
}
int SUB(int x, int y) // Subtraction function
{
return x - y;
}
int MUL(int x, int y) // Multiplication function
{
return x * y;
}
int DIV(int x, int y) // Division function
{
return x / y;
}
void calat(int(*pa)(int, int)) //calat The function parameter of is the address of the function ,
{ // Different function addresses , Call different functions
int ret,x,y;
printf(" Please enter two operands :");
scanf("%d%d", &x, &y);
ret = pa(x, y);
printf(" The calculation result is :%d\n", ret);
}
int main()
{
int a, b, ret, input;
do
{
menu();
printf(" Please enter the option :\n");
scanf("%d", &input);
switch (input)
{
case 0:
printf(" Exit calculation !\n");
break;
case 1:
calat(ADD); // Different input values , to calat Functions pass different function addresses .
break;
case 2:
calat(SUB);
break;
case 3:
calat(MUL);
break;
case 4:
calat(DIV);
break;
default:
printf(" Input error , Please re-enter !\n");
break;
}
} while (input);
return 0;
}
When you first enter the function , The steps are the same as the above code , But here we use switch case Statement to realize the selection of calculation items , And we can write a function , Used to realize calculation , The parameter of this function can use the function address , When we enter different options , Give different function addresses to the calculation function , Then the calculation function calls a function to calculate according to the passed function address , This is a simple callback function .
边栏推荐
- Introduction to the differences between compiler options of GCC dynamic library FPIC and FPIC
- torch建立的网络模型使用torchviz显示
- 【嵌入式】使用JLINK RTT打印log
- UnsupportedOperationException异常
- @Jsonbackreference and @jsonmanagedreference (solve infinite recursion caused by bidirectional references in objects)
- Roguelike游戏成破解重灾区,如何破局?
- Leetcode: Sword finger offer 42 Maximum sum of continuous subarrays
- Promise 在uniapp的简单使用
- LeetCode:236. 二叉树的最近公共祖先
- vb.net 随窗口改变,缩放控件大小以及保持相对位置
猜你喜欢

Analysis of the source code of cocos2d-x for mobile game security (mobile game reverse and protection)

pcd转ply后在meshlab无法打开,提示 Error details: Unespected eof

JVM quick start
![[embedded] cortex m4f DSP Library](/img/83/ab421d5cc18e907056ec2bdaeb7d5c.png)
[embedded] cortex m4f DSP Library

LeetCode:498. 对角线遍历

UnsupportedOperationException异常

View computer devices in LAN

Sublime text in CONDA environment plt Show cannot pop up the problem of displaying pictures

Double pointeur en langage C - - modèle classique

游戏解包的危害及资源加密的重要性
随机推荐
The harm of game unpacking and the importance of resource encryption
TP-LINK 企业路由器 PPTP 配置
Browser thread
sublime text中conda环境中plt.show无法弹出显示图片的问题
电脑F1-F12用途
Promise 在uniapp的简单使用
Roguelike game into crack the hardest hit areas, how to break the bureau?
Tcp/ip protocol
深度剖析C语言数据在内存中的存储
ESP8266-RTOS物联网开发
堆排序详解
Niuke winter vacation training 6 maze 2
Rviz仿真时遇到机器人瞬间回到世界坐标原点的问题及可能原因
@Jsonbackreference and @jsonmanagedreference (solve infinite recursion caused by bidirectional references in objects)
JVM quick start
Hutool gracefully parses URL links and obtains parameters
LeetCode:387. 字符串中的第一个唯一字符
LeetCode:剑指 Offer 48. 最长不含重复字符的子字符串
vb.net 随窗口改变,缩放控件大小以及保持相对位置
Bitwise logical operator