实现简单的加减乘除,只需要输入操作数和操作符
输入eg:1 + 2
#include <stdio.h>
#include <stdlib.h>
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 div1(int a,int b)
{
return a/b;
}
int calc(int a,int b,int (*pfunc)(int ,int ))
{
return pfunc(a,b);
}
input_expre(char *buf,int len)
{
int i=0;
printf("please input expresss\n");
while(1)
{
buf[i]= getchar();
if(buf[i]=='\n')
break;
i++;
if(i>=len)
{
printf("input is error\n");
return -1;
}
}
buf[i]='\0';
return 0;
}
int scanf_ope1(char **s)
{
int data=0;
while(' '==**s)
{
(*s)++;
}
while(**s>'0'&&**s<'9')
{
data=data*10+**s-'0';
(*s)++;
}
return data;
}
char scanf_opt(char **s)
{
char c;
while(**s==' ')
{
(*s)++;
}
c=**s;
return c;
}
int scanf_epress(char *p,int *ope1,int *ope2,char *opt)
{
*ope1=scanf_ope1(&p);
*opt=scanf_opt(&p);
p++;
*ope2=scanf_ope1(&p);
return 0;
}
int calc_expre(char *buf)
{
char opt=0;
int ope1=0;
int ope2=0;
int value=0;
scanf_epress(buf,&ope1,&ope2,&opt);
switch(opt)
{
case '+':
value=calc(ope1,ope2,add);
break;
case '-':
value=calc(ope1,ope2,sub);
break;
case '*':
value=calc(ope1,ope2,mul);
break;
case '/':
value=calc(ope1,ope2,div1);
break;
default:
printf("invalid opt must[+,-,*,/]\n");
exit(-1);
break;
}
return value;
}
int main(int argc, const char *argv[])
{
int ret=0;
char buf[1024]={0};
input_expre(buf,sizeof(buf));
ret=calc_expre(buf);
printf("%s=%d\n",buf,ret);
return 0;
}