今天就是用一种较难的方式实现计算器了
大家看代码吧
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;
}
这个是不是真的很难呢,要仔细阅读和理解哦!