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;
}
}
c语言遇到非法字符,98行的四则计算器.(支持括号)加入了非法字符的检测相关推荐
- c语言非法字符有哪些,98行的四则计算器.(支持括号)加入了非法字符的检测
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include double s2n(char **tem)//字符串转为数字 { double tem_s=ato ...
- c语言非法字符判别,98行的四则计算器.(支持括号)加入了非法字符的检测
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include double s2n(char **tem)//字符串转为数字 { double tem_s=ato ...
- c语言非法字符空格,98行的四则计算器.(支持括号)加入了非法字符的检测
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include double s2n(char **tem)//字符串转为数字 { double tem_s=ato ...
- html中%3c%3e字符原样显示,整理HTML5中支持的URL编码与字符编码_html5教程技巧-H5教程...
URL 编码URL 编码就是将 URLs 中不宜打印的字符或者具有特殊意义的字符转换为 Web 浏览器和服务器明白且普遍接受的表示法. 这些字符包括: ASCII 控制字符 - 不宜打印的字符通常用于 ...
- R语言删除包含缺失值的行并将字符数据列(character)转化为因子列(factor)实战
R语言删除包含缺失值的行并将字符数据列(character)转化为因子列(factor)实战 目录
- C语言试题四十六之将m行n列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
1. 题目 请编写一个函数function,它的功能是:将m行n列的二维数组中的字符数据,按列的顺序依次放到一个字符串中. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试 ...
- C语言:输出n行由大写字母A开始构成的三角形字符阵列。
实验4-2-6 输出三角形字符阵列(15 分) 本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列. 输入格式: 输入在一行中给出一个正整数n(1≤n<7). 输出格式: 输出n行由 ...
- C语言 输入是一整行的字符串
输入是一整行的字符串的 C语法: char buf[20]; gets(buf); C++语法: 如果用string buf;来保存: getline( cin , buf ); 如果用char bu ...
- 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言
用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言 用c语言手搓一个60 ...
最新文章
- redis集群scan_利用scan迁移部分单点redis数据到RedisCluster
- 【Python】打印魔方阵
- sylog mysql_syslog-ng+loganalyzer搭建日志集中监控平台
- C++高斯赛德迭代法,求线性方程组的解(version1.0)
- 无功功率控制模式matlab,第9章_MATLAB在风力发电技术中的应用仿真.ppt
- Linux报错nginx: [emerg] unexpected “}”
- thrift简单使用
- Java中带有JWebSocket的WebServerSocket
- 理论基础 —— 排序 —— 原始冒泡排序
- vue路由1.0_【Vue】路由
- 转:FileReader详解与实例---读取并显示图像文件
- 从零开始带你成为消息中间件实战高手_系统化开课了,电子入门一切从零开始,喜欢电子的有机会学习了...
- root下E45:‘readonly‘‘ option is set(addto override)报错
- RTL8762 开发板试用
- 工作安排(反悔贪心板子题)
- 6大应用,大象机器人双臂协作机器人,即将7月上市,一切就绪!
- AtCoder Regular Contest 154 题解
- 【RF】【元素定位】 Other element would receive the click
- krait和kryo_java原生序列化和Kryo序列化性能实例对比分析
- SAP概念之利润中心(Profit Center)