C语言中有eval函数吗 c++eval

帮我写一个c语言计算器

#include stdio.h

成都创新互联从2013年创立,是专业互联网技术服务公司,拥有项目成都网站设计、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元二七做网站,已为上家服务,为二七各地企业和个人服务,联系电话:028-86922220

#include stdlib.h

#include string.h

int errorflag;

typedef struct

{

double array[100];

int top;

}stack;

int isNumeric(char s) // 判断是不是数字

{

if(s='0's='告丛9' || s=='.')

return 1;

return 0;

}

int empty(stack* s) // 判断stack是不是为空

{

return s-top == 0;

}

void init(stack *s) // 初始化 stack

{

s-top = 0;

}

void push(stack* s, double a) // 入stack

{

s-array[s-top++] = a;

}

double pop(stack* s) // 出stack

{

if(!empty(s))

return s-array[--s-top];

}

double eval(char* s, char* e) // 解析算式

{

stack t;

double temp,temp2;

char *p, *q, *r;

int flag;

char op = '+';

init(t);

push(t,0);

while(se *s==' ') s++; // 清空前导 0

while(se *(e-1)==' ') e--; // 清空后导 0

if(s==e) return 0; // 空串 返回 0

p = s;

q = e;

for(;!errorflagpq;p++) // 历遍整个串

{

if(*p == ' ') continue; // 无视空格

else if(*p=='+' || *p == '-' || *p == '*' || *p == '/')

{

op = *p; // 更换操作纳早符

continue;

}

else

{

if(*p == '(') // 遇到左括号

{

r = p+1;

flag = 1;

while(flag)

{

p++;

if(p=e)

{

printf("\nError: ( and ) not matched.\n");

errorflag = 1;

q = s;

while(qe)

{

putchar(*q);

q++;

}

putchar(10);

q = s;

while(q p)

{

putchar(' ');

q++;

}

printf("^\n");

break;

}

if(*p=='(')

flag++;

if(*p==')') // 找到匹配的右括号

flag--;

}

temp = eval(r,p); // 括号内调用eval函数得到值

}

else if( *p == ')' )

{

printf("\nError: ( and ) not matched.\n");

errorflag = 1;

q = s;

while(qe)

{

putchar(*q);

q++;

}

putchar(10);

q = s;

while(q p)

{

putchar(' ');

q++;

}

printf("^\n");

break;

}

else if(isNumeric(*p)) // 如果是简单数字

{

sscanf(p,"%lf",temp); // 利用sscanf扫入数字

while(isNumeric(*p)) p++; // 指针偏移

p--;

}

else

{

printf("袜茄樱\nError: character not recognized.\n");

errorflag = 1;

q = s;

while(qe)

{

putchar(*q);

q++;

}

putchar(10);

q = s;

while(q p)

{

putchar(' ');

q++;

}

printf("^\n");

break;

}

if(op=='+') // 根据操作符入stack

push(t,temp);

else if(op=='-')

push(t,-temp);

else if(op=='*')

{

temp2 = pop(t);

temp2 *= temp;

push(t,temp2);

}

else if(op=='/')

{

if(temp == 0)

{

printf("\nError: divided by zero.\n");

errorflag = 1;

q = s;

while(qe)

{

putchar(*q);

q++;

}

putchar(10);

q = s;

while(q p)

{

putchar(' ');

q++;

}

printf("^\n");

break;

}

temp2 = pop(t);

temp2 /= temp;

push(t,temp2);

}

}

}

if(errorflag)

{

return -1;

}

temp = 0;

while(!empty(t)) // 统计stack内所有数之和

{

temp2 = pop(t);

temp += temp2;

}

return temp; // 返回总和

}

int main()

{

char s[1000];

int len;

double result;

while(gets(s))

{

errorflag = 0;

len = strlen(s);

result = eval(s,s+len);

if(!errorflag)

printf("%lf\n",result);

}

}

新闻标题:C语言中有eval函数吗 c++eval
网站地址:https://www.cdcxhl.com/article8/dspgiop.html

成都网站建设公司_创新互联,为您提供标签优化网站收录定制开发品牌网站建设网站导航网站排名

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都定制网站网页设计