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; }