关于一个简单的计算器
我想写一个输入格式例如A+B*C/D-E的计算器,暂时不考虑括号,思路如下图代码如下
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 1024
typedef struct
{
float data[maxsize];
int top;
}SeqStack1;//储存数字的栈
typedef struct
{
char data[maxsize];
int top;
}SeqStack2;//储存符号的栈
void NumberDelete(SeqStack1 &L,int t)//对数字栈的元素删除
{
int i;
for(i=t;i<L.top;i++)
L.data[i]=L.data[i+1];
L.top--;
}
void NumberInsert(SeqStack1 &L,float x)//对数字栈的元素添加
{
L.top++;
L.data[L.top]=x;
}
void MarkDelete(SeqStack2 &L,int t)//对符号栈的元素删除
{
int i;
for(i=t;i<L.top;i++)
L.data[i]=L.data[i+1];
L.top--;
}
void MarkInsert(SeqStack1 &L,char x)//对符号栈的元素添加
{
L.top++;
L.data[L.top]=x;
}
void Counter(char a[])//计算器的函数
{
SeqStack1 number;//number将输入的字符串中的数字字符转化为浮点型储存
SeqStack2 mark;//mark储存字符串中的运算符号
char p[100][100],x;
int i,j;
j=0;
number.top=-1;/*初始化两个栈*/
mark.top=-1;
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='0'&&a[i]<='9')
{
p[j][i]=a[i];
}
else
{
MarkDelete(mark,a[i]);
j++;
}
}
for(i=0;i<=j;i++)
{
x=atof(p[i]);
NumberInsert(number,x);
}
i=0;
while(i<mark.top)
{
if(mark.data[i]=='*')
{
number.data[i]=number.data[i]*number.data[i+1];
NumberDelete(number,i+1);
MarkDelete(mark,i);
}
if(mark.data[i]=='/')
{
number.data[i]=number.data[i]/number.data[i+1];
NumberDelete(number,i+1);
MarkDelete(mark,i);
}
else i++;
}
i=0;
while(number.top!=0)
{
if(mark.data[i]=='+')
{
number.data[i]=number.data[i]+number.data[i+1];
NumberDelete(number,i+1);
MarkDelete(mark,i);
}
if(mark.data[i]=='-')
{
number.data[i]=number.data[i]-number.data[i+1];
NumberDelete(number,i+1);
MarkDelete(mark,i);
}
}
printf("%f\n",number.data[0]);
}
int main()
{
char a[100];
gets(a);
Counter(a);
return 0;
}
不知道为什么是个死循环,送上70分求高手