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

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

}

}

c语言遇到非法字符,98行的四则计算器.(支持括号)加入了非法字符的检测相关推荐

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

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include double s2n(char **tem)//字符串转为数字 { double tem_s=ato ...

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

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include double s2n(char **tem)//字符串转为数字 { double tem_s=ato ...

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

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include double s2n(char **tem)//字符串转为数字 { double tem_s=ato ...

  4. html中%3c%3e字符原样显示,整理HTML5中支持的URL编码与字符编码_html5教程技巧-H5教程...

    URL 编码URL 编码就是将 URLs 中不宜打印的字符或者具有特殊意义的字符转换为 Web 浏览器和服务器明白且普遍接受的表示法. 这些字符包括: ASCII 控制字符 - 不宜打印的字符通常用于 ...

  5. R语言删除包含缺失值的行并将字符数据列(character)转化为因子列(factor)实战

    R语言删除包含缺失值的行并将字符数据列(character)转化为因子列(factor)实战 目录

  6. C语言试题四十六之将m行n列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。

    1. 题目 请编写一个函数function,它的功能是:将m行n列的二维数组中的字符数据,按列的顺序依次放到一个字符串中. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试 ...

  7. C语言:输出n行由大写字母A开始构成的三角形字符阵列。

    实验4-2-6 输出三角形字符阵列(15 分) 本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列. 输入格式: 输入在一行中给出一个正整数n(1≤n<7). 输出格式: 输出n行由 ...

  8. C语言 输入是一整行的字符串

    输入是一整行的字符串的 C语法: char buf[20]; gets(buf); C++语法: 如果用string buf;来保存: getline( cin , buf ); 如果用char bu ...

  9. 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言

    用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言 用c语言手搓一个60 ...

最新文章

  1. redis集群scan_利用scan迁移部分单点redis数据到RedisCluster
  2. 【Python】打印魔方阵
  3. sylog mysql_syslog-ng+loganalyzer搭建日志集中监控平台
  4. C++高斯赛德迭代法,求线性方程组的解(version1.0)
  5. 无功功率控制模式matlab,第9章_MATLAB在风力发电技术中的应用仿真.ppt
  6. Linux报错nginx: [emerg] unexpected “}”
  7. thrift简单使用
  8. Java中带有JWebSocket的WebServerSocket
  9. 理论基础 —— 排序 —— 原始冒泡排序
  10. vue路由1.0_【Vue】路由
  11. 转:FileReader详解与实例---读取并显示图像文件
  12. 从零开始带你成为消息中间件实战高手_系统化开课了,电子入门一切从零开始,喜欢电子的有机会学习了...
  13. root下E45:‘readonly‘‘ option is set(addto override)报错
  14. RTL8762 开发板试用
  15. 工作安排(反悔贪心板子题)
  16. 6大应用,大象机器人双臂协作机器人,即将7月上市,一切就绪!
  17. AtCoder Regular Contest 154 题解
  18. 【RF】【元素定位】 Other element would receive the click
  19. krait和kryo_java原生序列化和Kryo序列化性能实例对比分析
  20. SAP概念之利润中心(Profit Center)

热门文章

  1. 百度语音识别demo:去掉离线识别功能
  2. golang 切片 截取参数 简介
  3. linux 查看显卡信息
  4. java 日志输出 log4j 简介
  5. linux ip_conntrack 连接满导致网络丢包
  6. linux c 重定向流后的恢复 freopen后的恢复
  7. linux centos 下载rpm源码包
  8. 使用Suhosin保护PHP应用系统(禁用eval)
  9. php如何判断当前的操作系统是linux还是windows
  10. DUILib 中的通知事件