c语言判断非法字符题目,98行的四则计算器.(支持括号)加入了非法字符的检测
该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include#include#includedouble s2n(char **tem)//字符串转为数字{double tem_s=atof(*tem);while(isdigit(*++(*tem))||**tem=='.');return tem_s;}bool error_found(const char *now)//检测错误的输入{whi.
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#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;
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)