利用设计简易计算器,来学习【回调函数】
因为这一次的重点并不在计算器的实现,所以计算器很多细节并不关注。比如:没有按位操作、除法没有使用浮点数、等等......
头文件部分:
#pragma once
//菜单
void Menu();
//加减乘除
int Add(int a, int b);
int Sub(int a, int b);
int Mul(int a, int b);
int Div(int a, int b);
//运算类型分类
void Sort(int input, int a, int b);
//回调“加减乘除函数”
void Calc(int(*pf)(int, int), int a, int b);
子函数部分:
void Menu()
{
printf("*********************************\n");
printf("******** 1.Add 2.Sub ***********\n");
printf("******** 3.Mul 4.Div ***********\n");
printf("******** 0.Exit *****************\n");
}
int Add(int a, int b)
{
return a + b;
}
int Sub(int a, int b)
{
return a - b;
}
int Mul(int a, int b)
{
return a * b;
}
int Div(int a, int b)
{
return a / b;
}
void Calc(int(*pf)(int, int), int a, int b)
{
printf("结果为:%d\n", pf(a, b));
}
void Sort(int input, int a, int b)
{
switch (input)
{
case 1:
Calc(Add, a, b);
break;
case 2:
Calc(Sub, a, b);
break;
case 3:
Calc(Mul, a, b);
break;
case 4:
Calc(Div, a, b);
break;
default:
break;
}
}
主函数部分:
#define _CRT_SECURE_NO_WARNINGS 1
#include "calc.h"
#include <stdio.h>
int main()
{
int a = 0;//计算参数1
int b = 0;//计算参数2
int input = 0;//用户需要进行的计算类型
do
{
//打印菜单,询问用户需要进行什么计算
Menu();
scanf("%d", &input);
//判断输出是否正确
if (4 < input || 0 > input)
{
printf("输入错误,请重新输入-1~5(开区间)之间的整数。\n");
continue;
}
else if (0 == input)
{
break;
}
else
{
printf("请输入需要计算的2个数,其间用空格分隔:\n");
scanf("%d %d", &a, &b);
}
//进行计算
Sort(input, a, b);
} while (input);
return 0;
}