该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include

double s2n(char **tem)//字符串转为数字

{

double tem_s=atof(*tem);

while(isdigit(*++(*tem))||**tem=='.');

return tem_s;

}

bool error_found(const char *now)//检测错误的输入

{

while(*now++!='\0'&&isdigit(*now)||*now=='('||*now==')'||*now=='+'||*now=='-'||*now=='*'||*now=='/')

;

return (*now=='\0')? false:true;

}

double cacl( char **tem)//计算函数

{

char *now=*tem,*temp=now;

double left=0.0,right=0.0;

while(*now!='\0'&&*now!=')')

{

if(*now>='0'&&*now<='9')

left=s2n(&now);

else if(*now=='*'||*now=='/')

{

if(*(now+1)>='0'&&*(now+1)<='9')

{

switch(*now)

{

case '*':right=s2n(&(++now));left*=right;break;

case '/':right=s2n(&(++now));left/=right;break;

}

}

else if(*(now+1)=='(')

{

temp=now;

now+=2;

right=cacl(&now);

switch(*temp)

{

case '*':left*=right;break;

case '/':left/=right;break;

}

}

}

else if(*now=='+'||*now=='-')

{

if(*(now+1)>='0'&&*(now+1)<='9')

{

temp=now;

right=s2n(&(++now));

if(*now=='*'||*now=='/')

{

now=temp;

right=cacl(&(++now));

if(*now!='\0')

now--;

}

switch(*temp)

{

case '+':left+=right;break;

case '-':left-=right;break;

}

}

else if(*(now+1)=='(')

{

temp=now;

now+=2;

right=cacl(&now);

switch(*temp)

{

case '+':left+=right;break;

case '-':left-=right;break;

}

}

}

else if(*now=='(')

left=cacl(&(++now));

}

*tem=(*now==')')?now+1:now;

return left;

}

int main(void)

{

char *in,*temp;

temp=in=(char*)malloc(sizeof(100));

while(1)

{

fputs("输入:",stdout);

gets(in);

if(error_found(in))

{printf("非法字符\n");

continue;

}

printf("----\n",cacl(&in));

in=temp;

}

}

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐