
程序出现declaration syntax error,哪位高手帮忙解决一下,不胜感激!程序如下:(栈表达式求值)
#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineSTACK_INIT_SIZE100#defineS...
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef struct
{char *base;
char *top;
int stacksize;
}SqStack;
SqStack InitStack(SqStack S)
{ S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return S;
}
SqStack Push(SqStack S,char e)
{ if(S.top-S.base>=STACK_INIT_SIZE)
{ S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof
(char));
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return S;
}
char GetTop(SqStack S)
{ if(S.top==S.base) return ERROR;
return *(S.top-1);
}
char Pop(SqStack S,char e)
{
if(S.top==S.base) return ERROR;
else e=*--S.top;
return e;
}
char OP[7][7]={'>', '>', '<', '<', '<', '>', '>',
'>', '>', '<', '<', '<', '>', '>',
'>', '>', '>', '>', '<', '>', '>',
'>', '>', '>', '>', '<', '>', '>',
'<', '<', '<', '<', '<', '=', 'E',
'>', '>', '>', '>', 'E', '>', '>',
'<', '<', '<', '<', '<', 'E', '='};
int GetOperatorID(char Operator)
{ int retCode;
retCode = -1;
switch(Operator) {
case '+': retCode = 0; break;
case '-': retCode = 1; break;
case '*': retCode = 2; break;
case '/': retCode = 3; break;
case '(': retCode = 4; break;
case ')': retCode = 5; break;
case '#': retCode = 6; break;
}
return(retCode);
}
char Precede(char Operator1, char Operator2)
{
int OperatorID1, OperatorID2;
OperatorID1=GetOperatorID(Operator1);
OperatorID2=GetOperatorID(Operator2);
if (OperatorID1<0||OperatorID1>6||OperatorID2<0||OperatorID2>6) return
('E');
return(OP[OperatorID1][OperatorID2]);
}
int Operate(int a,char theta,int b)
{ int result;
switch(theta)
{ case '+': result = a+b; break;
case '-': result = a-b; break;
case '*': result = a*b; break;
case '/': result = a/b; break;
}
return result;
}
int OperandType EvaluateExpression()
{ int a,b;
char theta;char c;
SqStack OPTR;
SqStack OPND;
InitStack(OPTR); Push(OPTR,'#');
InitStack(OPND);c=getchar();
while(c!='#'||GetTop(OPTR)!='#')
{if ((c>='0') && (c<='9')) {Push(OPND,c);c=getchar();}
else
switch (Precede(GetTop(OPTR),c))
{ case '<':Push(OPTR,c);c=getchar();break;
case '=':Pop(OPTR,c);c=getchar();break;
case '>':Pop(OPTR,theta);
Pop(OPND,b);Pop(OPND,a);
Push(OPND,Operate(a,theta,b);break;
}
}
return GetTop(OPND);
}
main()
{
int z;
z=OperandType EvaluateExpression();
printf("The result is %d\n", z);
} 展开
#include<conio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef struct
{char *base;
char *top;
int stacksize;
}SqStack;
SqStack InitStack(SqStack S)
{ S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return S;
}
SqStack Push(SqStack S,char e)
{ if(S.top-S.base>=STACK_INIT_SIZE)
{ S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof
(char));
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return S;
}
char GetTop(SqStack S)
{ if(S.top==S.base) return ERROR;
return *(S.top-1);
}
char Pop(SqStack S,char e)
{
if(S.top==S.base) return ERROR;
else e=*--S.top;
return e;
}
char OP[7][7]={'>', '>', '<', '<', '<', '>', '>',
'>', '>', '<', '<', '<', '>', '>',
'>', '>', '>', '>', '<', '>', '>',
'>', '>', '>', '>', '<', '>', '>',
'<', '<', '<', '<', '<', '=', 'E',
'>', '>', '>', '>', 'E', '>', '>',
'<', '<', '<', '<', '<', 'E', '='};
int GetOperatorID(char Operator)
{ int retCode;
retCode = -1;
switch(Operator) {
case '+': retCode = 0; break;
case '-': retCode = 1; break;
case '*': retCode = 2; break;
case '/': retCode = 3; break;
case '(': retCode = 4; break;
case ')': retCode = 5; break;
case '#': retCode = 6; break;
}
return(retCode);
}
char Precede(char Operator1, char Operator2)
{
int OperatorID1, OperatorID2;
OperatorID1=GetOperatorID(Operator1);
OperatorID2=GetOperatorID(Operator2);
if (OperatorID1<0||OperatorID1>6||OperatorID2<0||OperatorID2>6) return
('E');
return(OP[OperatorID1][OperatorID2]);
}
int Operate(int a,char theta,int b)
{ int result;
switch(theta)
{ case '+': result = a+b; break;
case '-': result = a-b; break;
case '*': result = a*b; break;
case '/': result = a/b; break;
}
return result;
}
int OperandType EvaluateExpression()
{ int a,b;
char theta;char c;
SqStack OPTR;
SqStack OPND;
InitStack(OPTR); Push(OPTR,'#');
InitStack(OPND);c=getchar();
while(c!='#'||GetTop(OPTR)!='#')
{if ((c>='0') && (c<='9')) {Push(OPND,c);c=getchar();}
else
switch (Precede(GetTop(OPTR),c))
{ case '<':Push(OPTR,c);c=getchar();break;
case '=':Pop(OPTR,c);c=getchar();break;
case '>':Pop(OPTR,theta);
Pop(OPND,b);Pop(OPND,a);
Push(OPND,Operate(a,theta,b);break;
}
}
return GetTop(OPND);
}
main()
{
int z;
z=OperandType EvaluateExpression();
printf("The result is %d\n", z);
} 展开
1个回答
展开全部
你程序的第87行:
int OperandType EvaluateExpression()
被报告了申明错误,因为这行不符合函数申明的格式,函数申明的格式一般如下:
类型 函数名([参数]){}
你int作为类型,OperandType和EvaluateExpression两个单词作为函数名,这是不允许的,只能有一个单词。
int OperandType EvaluateExpression()
被报告了申明错误,因为这行不符合函数申明的格式,函数申明的格式一般如下:
类型 函数名([参数]){}
你int作为类型,OperandType和EvaluateExpression两个单词作为函数名,这是不允许的,只能有一个单词。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询