计算器的一般实现
通过函数的调用,实现加减乘除
# define _CRT_SECURE_NO_WARNINGS #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***************************\n"); printf("*********2.Sub***************************\n"); printf("*********3.Mul***************************\n"); printf("*********4.Div***************************\n"); printf("*********0.exit**************************\n"); printf("*****************************************\n"); } int main() { int x = 0; int y = 0; int input = 0; int ret = 0; do { menu(); printf("请选择:> "); scanf("%d",&input); switch (input) { case 1: printf("请输入操作数:> "); scanf("%d %d", &x, &y); ret = Add(x, y); printf("%d\n", ret); break; case 2: printf("请输入操作数:> "); scanf("%d %d", &x, &y); ret = Sub(x, y); printf("%d\n", ret); break; case 3: printf("请输入操作数:> "); scanf("%d %d", &x, &y); ret = Mul(x, y); printf("%d\n", ret); break; case 4: printf("请输入操作数:> "); scanf("%d %d", &x, &y); ret = Div(x, y); printf("%d\n", ret); break; case 0: printf("退出程序\n"); break; default: printf("输入错误,请重新输入\n"); break; } } while (input); return 0; }
使⽤函数指针数组的实现(转移表)
前面,我们使用调用函数的方式,来实现计算器的基本功能。
但是,在一些牛逼的计算器中,实现的功能会更多,不仅实现加减乘除,还能实现位运算等。
那么,我们还是依然去调用函数吗?switch语句也会越来越长
会不会有点麻烦啦?
于是,我们需要在上面的基础上进行更改。
简化代码:
# define _CRT_SECURE_NO_WARNINGS # define _CRT_SECURE_NO_WARNINGS #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***************************\n"); printf("*********2.Sub***************************\n"); printf("*********3.Mul***************************\n"); printf("*********4.Div***************************\n"); printf("*********0.exit**************************\n"); printf("*****************************************\n"); } int main() { int x = 0; int y = 0; int input = 0; int ret = 0; //函数指针数组 int(*pfArr[])(int x,int y) = { 0,Add,Sub,Mul,Div }; //转移表 // 0 1 2 3 4 do { menu(); printf("请选择:> "); scanf("%d", &input); if (input >= 1 && input <= 4) { printf("请输入操作数:>"); scanf("%d %d", &x, &y); ret =(*pfArr[input])(x, y); printf("%d\n", ret); } else if (input == 0) { printf("退出程序\n"); } else { printf("输入错误,重新输入\n"); } } while (input); return 0; }