当前位置:网站首页>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:214. 最短回文串
- LeetCode:34. 在排序数组中查找元素的第一个和最后一个位置
- Guangzhou will promote the construction of a child friendly city, and will explore the establishment of a safe area 200 meters around the school
- 移位运算符
- 角色动画(Character Animation)的现状与趋势
- sublime text的编写程序时的Tab和空格缩进问题
- LeetCode:221. 最大正方形
- Indentation of tabs and spaces when writing programs for sublime text
- Double pointeur en langage C - - modèle classique
- 软件压力测试常见流程有哪些?专业出具软件测试报告公司分享
猜你喜欢

ESP8266-RTOS物联网开发

可变长参数

vb.net 随窗口改变,缩放控件大小以及保持相对位置

704 二分查找

visdom可视化实现与检查介绍

Fairguard game reinforcement: under the upsurge of game going to sea, game security is facing new challenges

MySQL learning records 12jdbc operation transactions

Mobile phones and computers on the same LAN access each other, IIS settings

Deep anatomy of C language -- C language keywords

C语言双指针——经典题型
随机推荐
角色动画(Character Animation)的现状与趋势
Revit secondary development Hof method calls transaction
Image,cv2读取图片的numpy数组的转换和尺寸resize变化
POI add write excel file
MySQL learning records 12jdbc operation transactions
The harm of game unpacking and the importance of resource encryption
Promise 在uniapp的简单使用
MySQL learning record 10getting started with JDBC
LeetCode:39. 组合总和
Deep analysis of C language pointer
Swagger setting field required is mandatory
Navicat premium create MySQL create stored procedure
Excellent software testers have these abilities
sublime text没关闭其他运行就使用CTRL+b运行另外的程序问题
Target detection - pytorch uses mobilenet series (V1, V2, V3) to build yolov4 target detection platform
如何进行接口测试测?有哪些注意事项?保姆级解读
R language ggplot2 visualization: place the title of the visualization image in the upper left corner of the image (customize Title position in top left of ggplot2 graph)
Function coritization
poi追加写EXCEL文件
Niuke winter vacation training 6 maze 2