double char_to_double(char DigitString[],int markpot,int markend);
//得到表达式的首项,并检查字符是否合法
int getexp(double *data,char *oprt);
typedef struct
{
char oprt_stack[MAXSIZE];
double data_stack[MAXSIZE];
char oprt_in,oprt_out,*oprt_curp;
double data_in,data_out,*data_curp;
}stack;
stack STK;
/* 一组栈操作函数*/
/*操作成功返回,失败返回*/
int PopData(stack *p);
int PushData(stack *p);
int PopOprt(stack *p);
int PushOprt(stack *p);
void clear(stack *p);
//语法检查函数,返回表示表达式结束
int checkgram(int fsitua,int lsitua);
//功能函数,比较两个运算符的优先级
int priority(char cal1,char cal2);
//错误处理函数,丢弃出错后所有字符,并打印出错信息
void error(int state);
//计算函数,有发现简单逻辑错误的功能
int calculat(double data1,char oprt,double data2,double *result);
void main()
{
int FState,LState,GramState,CalcuState;
double result,TempData;
char TempOprt;
STK.data_curp=STK.data_stack;
STK.oprt_curp=STK.oprt_stack;
while(1){
clear(&STK);
EXP_INIT=1;
BRACKET_COUNT=0;
LState=100;
GramState=1;
CalcuState=1;
printf("请输入表达式> ");
do{