当前位置:网站首页>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 .
边栏推荐
- LeetCode:剑指 Offer 03. 数组中重复的数字
- Image, CV2 read the conversion and size resize change of numpy array of pictures
- Screenshot in win10 system, win+prtsc save location
- [embedded] print log using JLINK RTT
- C language double pointer -- classic question type
- 个人电脑好用必备软件(使用过)
- torch建立的网络模型使用torchviz显示
- 深度剖析C语言数据在内存中的存储
- Bitwise logical operator
- JVM quick start
猜你喜欢
Restful API design specification
win10系统中的截图,win+prtSc保存位置
【嵌入式】使用JLINK RTT打印log
TP-LINK enterprise router PPTP configuration
sublime text中conda环境中plt.show无法弹出显示图片的问题
[embedded] cortex m4f DSP Library
sublime text没关闭其他运行就使用CTRL+b运行另外的程序问题
LeetCode:498. 对角线遍历
查看局域网中电脑设备
Computer cleaning, deleted system files
随机推荐
Detailed explanation of heap sorting
JS pure function
MySQL learning record 11jdbcstatement object, SQL injection problem and Preparedstatement object
Screenshot in win10 system, win+prtsc save location
延迟初始化和密封类
Mobile phones and computers on the same LAN access each other, IIS settings
JVM quick start
LeetCode:498. 对角线遍历
View computer devices in LAN
Variable length parameter
Excellent software testers have these abilities
Problems in loading and saving pytorch trained models
How to conduct interface test? What are the precautions? Nanny level interpretation
Image, CV2 read the conversion and size resize change of numpy array of pictures
LeetCode:214. 最短回文串
pcd转ply后在meshlab无法打开,提示 Error details: Unespected eof
Marathon envs project environment configuration (strengthen learning and imitate reference actions)
Simple use of promise in uniapp
LeetCode:236. 二叉树的最近公共祖先
[NVIDIA development board] FAQ (updated from time to time)