当前位置:网站首页>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 .
边栏推荐
- 可变长参数
- MySQL learning records 12jdbc operation transactions
- @JsonBackReference和@JsonManagedReference(解决对象中存在双向引用导致的无限递归)
- Hutool gracefully parses URL links and obtains parameters
- LeetCode:214. 最短回文串
- marathon-envs项目环境配置(强化学习模仿参考动作)
- sublime text的编写程序时的Tab和空格缩进问题
- Process of obtaining the electronic version of academic qualifications of xuexin.com
- The mysqlbinlog command uses
- 如何有效地进行自动化测试?
猜你喜欢
Roguelike game into crack the hardest hit areas, how to break the bureau?
vb. Net changes with the window, scales the size of the control and maintains its relative position
软件卸载时遇到trying to use is on a network resource that is unavailable
LeetCode:236. 二叉树的最近公共祖先
个人电脑好用必备软件(使用过)
Marathon envs project environment configuration (strengthen learning and imitate reference actions)
Unified ordering background interface product description Chinese garbled
Using pkgbuild:: find in R language_ Rtools check whether rtools is available and use sys The which function checks whether make exists, installs it if not, and binds R and rtools with the writelines
Variable length parameter
egg. JS project deployment online server
随机推荐
Navicat premium create MySQL create stored procedure
Double pointeur en langage C - - modèle classique
China vanadium battery Market Research and future prospects report (2022 Edition)
Using pkgbuild:: find in R language_ Rtools check whether rtools is available and use sys The which function checks whether make exists, installs it if not, and binds R and rtools with the writelines
TDengine 社区问题双周精选 | 第三期
生成器参数传入参数
Roguelike游戏成破解重灾区,如何破局?
深度剖析C语言数据在内存中的存储
@JsonBackReference和@JsonManagedReference(解决对象中存在双向引用导致的无限递归)
Browser thread
Roguelike game into crack the hardest hit areas, how to break the bureau?
LeetCode:221. 最大正方形
pcd转ply后在meshlab无法打开,提示 Error details: Unespected eof
Delay initialization and sealing classes
Deep anatomy of C language -- C language keywords
egg. JS project deployment online server
What is the role of automated testing frameworks? Shanghai professional third-party software testing company Amway
Image,cv2读取图片的numpy数组的转换和尺寸resize变化
Visual implementation and inspection of visdom
POI add write excel file