1.首先利用do while()弄一个菜单函数,定义一个input变量,利用switch语句来选择菜单中的加减乘除,再分装函数就可以了
不过这个计算器只是特别简单的一种,用来初学者练习。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void menu()
{
printf("************************\n");
printf("**** 1.Add 2.Sub ****\n");
printf("**** 3.Mul 4.Div ****\n");
printf("************************\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;
}
int main()
{
int x, y;
int input;
int ret = 0;
do
{
menu();
printf("请选择:\n");
scanf("%d", &input);
switch (input)
{
case 1: printf("请输入操作数:\n");
scanf("%d %d", &x, &y);
ret = Add(x, y);
printf("ret=%d\n", ret);
break;
case 2: printf("请输入操作数:\n");
scanf("%d %d", &x, &y);
ret = Sub(x, y);
printf("ret=%d\n", ret);
break;
case 3: printf("请输入操作数:\n");
scanf("%d %d", &x, &y);
ret = Mul(x, y);
printf("ret=%d\n", ret);
break;
case 4: printf("请输入操作数:\n");
scanf("%d %d", &x, &y);
ret = Div(x, y);
printf("ret=%d\n", ret);
break;
default: printf("输入错误\n");
break;
}
} while (input);
return 0;
}
2.另一种是利用转移表的方式来写,将各个函数的地址存放在一个函数指针数组里面,当要使用函数时,就直接调用指针即可,可以改观上面的美观(上面的代码有很多重复的,太挫了)
根据函数指针数组的下标来找函数所以第一个下标0,就存放0,下标1呢存Add的函数地址,下标2存放Sub的地址,下标3存放Mul的地址,下标4存放Div的地址。
第二种:
#include <stdio.h>
void menu()
{
printf("************************\n");
printf("**** 1.Add 2.Sub ****\n");
printf("**** 3.Mul 4.Div ****\n");
printf("************************\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;
}
int main()
{
int input=1;
int x, y;
int ret = 0;
int(*pf[5])(int a, int b) = { 0,Add,Sub,Mul,Div };
//函数指针数组存放着函数地址,可以通过数组下标来找到函数地址然后进行调用。
while (input)
{
menu();
printf("请选择:\n");
scanf("%d", &input);
if (input >= 1 && input <= 4)
{
printf("请输入操作数:\n");
scanf("%d %d", &x, &y);
ret=pf[input](x, y);
printf("ret=%d\n", ret);
}
}
return 0;
}