简易计算器的实现

今天就是用一种较难的方式实现计算器了

大家看代码吧

 

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 dev(int a, int b)
{
	return a / b;
}
char oper = 0;
int(*pf)(int, int);
typedef struct opertion{
	char *fun_name;
	int(*pf)(int, int);
	char oper;
}opertion;
opertion ops[] = { { "add", add, '+' }, { "sub", sub, '-' }, { "mul", mul, '*' }, { "dev", dev, '/' } };
void math_main(int argc, char *argv[])
{
	int a = atoi(argv[1]);
	int b = atoi(argv[2]);
	int r = pf(a, b);
	printf("%s%c%s =%d ", argv[1],oper , argv[2], r);
}
void do_action(int argc, char *argv[])
{
	int i = 0;
	for (i = 0; i < sizeof(ops) / sizeof(*ops); i++)
	{
		if (strcmp(ops[i].fun_name, argv[0]) == 0)
		{
			pf = ops[i].pf;
			oper = ops[i].oper;
			break;
		}
	}
	math_main(argc, argv);
}
void parse(char *buf)
{
	int i = 0;
	int status = 0;
	int argc = 0;
	char *argv[] = { 0 };
	for (i = 0; buf[i] != 0;i++)
	{
		if (status == 0 && !isspace(buf))
		{
			argv[argc++]=buf + i;
			status = 1;

		}
		else if (isspace(buf))
		{
			buf[i] = 0;
			status = 0;
		}

	}
	argv[argc] = NULL;
	do_action(argc, argv);
}
int main()
{
	char buf[10] = { 0 };
	while (1)
	{
		printf("my shell:>");
		scanf("%[^\n]%*c", buf);
		parse(buf);
		memset(buf, 0, sizeof(buf));
	}
	getchar();
	return 0;

}


这个是不是真的很难呢,要仔细阅读和理解哦!

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值