先为大家奉上代码!
#include <stdio.h>
int Add(int x, int y)
{
return x + y;
}
int Sub(int x, int y)
{
return x - y;
}
int Mul(int x, int y)
{
return x * y;
}
int Div(int x, int y)
{
return x / y;
}
void menu()
{
printf("*********************\n");
printf("*** 1.Add 2.Sub ****\n");
printf("*** 3.Mul 4.Div ****\n");
printf("******* 0. exit *****\n");
printf("*********************\n");
}
int main()
{
int input = 0;
do {
menu();
//pfArr是函数指针数组
int (*pfArr[5])(int, int) = { NULL,Add,Sub,Mul,Div };
int x = 0;
int y = 0;
int ret = 0;
printf("请选择:>");
scanf("%d", &input);
if (input > 0 && input <= 4)
{
printf("请输入两个操作数:>");
scanf("%d %d", &x, &y);
ret = (pfArr[input])(x, y);
printf("ret = %d \n", ret);
}
else if (input == 0)
{
printf("程序退出:>");
}
else
{
printf("选择错误,请重新选择:>");
}
} while (input);
return 0;
}
首先,我们需要一个菜单menu,里面用printf打印函数实现,这是我们计算器的第一步。
其次,我们主要的思路是在主函数main里面对加减乘除函数进行调用,那么我们就需要先完成四个函数加减乘除,分别用Add,Sub,Mul,Div表示。
紧接着,如果我们在主函数里面用一般函数的调用方法,会显的方程冗长,如下图:
int main() { int input = 0; do { menu(); int x = 0; int y = 0; int ret = 0; scanf("%d", &input); switch (input) { case 1: printf("请输入两个操作数:>"); scanf("%d %d", &x, &y); ret = Add(x, y); printf("ret = %d \n", ret); break; case 2: printf("请输入两个操作数:>"); scanf("%d %d", &x, &y); ret = Sub(x, y); printf("ret = %d \n", ret); break; case 3: printf("请输入两个操作数:>"); scanf("%d %d", &x, &y); ret = Mul(x, y); printf("ret = %d \n", ret); break; case 4: printf("请输入两个操作数:>"); scanf("%d %d", &x, &y); ret = Div(x, y); printf("ret = %d \n", ret); break; case 0: printf("退出程序:>"); break; default: printf("选择错误:>"); break; } } while (input); return 0; }
那么,我们该如何解决这个问题呢?这个时候我们可以想到 -> 函数指针数组 。
我们将加减乘除四个函数变为函数指针,存放在数组里面,这也是函数指针数组的定义
int (*pfArr[5])(int, int) = { NULL,Add,Sub,Mul,Div };
最后再进行函数的调用
printf("请输入两个操作数:>");
scanf("%d %d", &x, &y);
ret = (pfArr[input])(x, y);//调用函数指针数组里面的Add函数
printf("ret = %d \n", ret);
好了,以上是我对函数指针数组在计算器方面的应用,谢谢大家的观看。