防止非法字符输入c语言,98行的四则计算器.(支持括号)加入了非法字符的检测

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

#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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值