『急!求助!』C 用malloc时提示错误expected')'before';'token ;C++中提示缺少')'在';'前

ALCATRAZ0 2017-10-19 06:09:36
代码如下
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define OK 1;
#define ERROR 0;
#define STACK_INIT_SIZE 10;
#define STACK_INCREMENTE 10;

typedef char ElemType1;
typedef int ElemType2;

typedef struct{ //OPTR栈的结构
ElemType1 *base;
ElemType1 *top;
int stacksize;
}SqStack1;
typedef struct{ //OPND栈的结构
ElemType2 *base;
ElemType2 *top;
int stacksize;
}SqStack2;



int InitStack1(SqStack1 &S){ //初始化OPTR
S.base=(ElemType1 *)malloc(STACK_INIT_SIZE*sizeof(ElemType1)); //expected')'before';'token(错误)
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
int Push1(SqStack1 &S,ElemType1 e){ //OPTR入栈
if(S.top-S.base>=S.stacksize){
S.base=(ElemType1 *)realloc(S.base,(S.stacksize+STACK_INCREMENTE)*sizeof(ElemType1)); // expected')'before';'token
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize=S.stacksize+STACK_INCREMENTE;
}
*S.top++=e;
return OK;
}
int Pop1(SqStack1 &S,ElemType1 e){ //OPTR出栈
if(S.base==S.top) return ERROR;
e=*--S.top;
return OK;
}
ElemType1 GetTop1(SqStack1 S){ //OPTR取栈顶元素
if(S.base==S.top) return ERROR;
ElemType1 e;
e=*(S.top-1);
return e;
}





int InitStack2(SqStack2 &S){ //初始化OPND
S.base=(ElemType2 *)malloc(STACK_INIT_SIZE*sizeof(ElemType2)); // expected')'before';'token(错误)
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
int Push2(SqStack2 &S,ElemType2 e){ //OPND入栈
if(S.top-S.base>=S.stacksize){
S.base=(ElemType2 *)realloc(S.base,(S.stacksize+STACK_INCREMENTE)*sizeof(ElemType2)); //(错误)expected')'before';'token
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize=S.stacksize+STACK_INCREMENTE;
}
*S.top++=e;
return OK;
}
int Pop2(SqStack2 &S,ElemType2 e){ //OPND出栈
if(S.base==S.top) return ERROR;
e=*--S.top;
return OK;
}
ElemType2 GetTop2(SqStack2 S){ //OPND取栈顶元素
if(S.base==S.top) return ERROR;
ElemType2 e;
e=*(S.top-1);
return e;
}


int IN(char c)
{
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='^'||c=='('||c==')'||'#') return 1;
else return 0;
}



char Precede(char d,char c){
switch(c){
case'+':switch(d)
{
case'+':return '>';break;
case'-':return '>';break;
case'*':return '>';break;
case'/':return '>';break;
case'^':return '>';break;
case'(':return '<';break;
case')':return '>';break;
case'#':return '<';break;
}
case'-':switch(d)
{
case'+':return '>';break;
case'-':return '>';break;
case'*':return '>';break;
case'/':return '>';break;
case'^':return '>';break;
case'(':return '<';break;
case')':return '>';break;
case'#':return '<';break;
}
case'*':switch(d)
{
case'+':return '<';break;
case'-':return '<';break;
case'*':return '>';break;
case'/':return '>';break;
case'^':return '>';break;
case'(':return '<';break;
case')':return '>';break;
case'#':return '<';break;
}
case'/':switch(d)
{
case'+':return '<';break;
case'-':return '<';break;
case'*':return '>';break;
case'/':return '>';break;
case'^':return '>';break;
case'(':return '<';break;
case')':return '>';break;
case'#':return '<';break;
}
case'^':switch(d)
{
case'+':return '<';break;
case'-':return '<';break;
case'*':return '<';break;
case'/':return '<';break;
case'^':return '>';break;
case'(':return '<';break;
case')':return '>';break;
case'#':return '<';break;
}
case'(':switch(d)
{
case'+':return '<';break;
case'-':return '<';break;
case'*':return '<';break;
case'/':return '<';break;
case'^':return '<';break;
case'(':return '<';break;
case'#':return '<';break;
}
case')':switch(d)
{
case'+':return '>';break;
case'-':return '>';break;
case'*':return '>';break;
case'/':return '>';break;
case'^':return '>';break;
case'(':return '=';break;
case')':return '>';break;
}
case'#':switch(d)
{
case'+':return '>';break;
case'-':return '>';break;
case'*':return '>';break;
case'/':return '>';break;
case'^':return '>';break;
case')':return '>';break;
case'#':return '=';break;
}
}
}


ElemType2 Operate(int a,char theta,int b){
switch(theta)
{ //break!!!!
case'+':return(a+b);
case'-':return (a-b);
case'*':return (a*b);
case'/':return (a/b);
case'^':return (pow(a,b));
}
}


int EvaluateExpression(){
SqStack1 OPTR;
SqStack2 OPND;
InitStack1(OPTR);
InitStack2(OPND);
char c,theta;
int num,a,b;
c=getchar();
Push1(OPTR,'#');
while(c!='#'||GetTop1(OPTR)!='#'){
if(!IN(c)){
while(!IN(c))
{
num*=10;
num+=(c-48);
c=getchar();
}
Push2(OPND,num);} //num='c'-48
else
{
switch(Precede(GetTop1(OPTR),c))
{
case'<':Push1(OPTR,c);c=getchar();break;
case'=':Pop1(OPTR,c);c=getchar();break;
case'>':Pop1(OPTR,theta); //theta=GetTop1(OPTR)
Pop2(OPND,b);Pop2(OPND,a);
Push2(OPND,Operate(a,theta,b));break;
}
}


}
return GetTop2(OPND);
}


int main()
{
printf("请输入要计算的表达式:\n");
int m;
m=EvaluateExpression();
printf("%d",m);
return 0;
}
...全文
743 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2017-10-20
  • 打赏
  • 举报
回复 1
月经问题 #define STACK_INIT_SIZE 10; //后面不要加; #define STACK_INCREMENTE 10;//如上;
自信男孩 2017-10-20
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
#include<math.h>


#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 10
#define STACK_INCREMENTE 10

typedef char ElemType1;
typedef int ElemType2;

typedef struct{           //OPTR栈的结构
    ElemType1 *base;
    ElemType1 *top;
    int stacksize;
}SqStack1;
typedef struct{           //OPND栈的结构
    ElemType2 *base;
    ElemType2 *top;
    int stacksize;
}SqStack2;



int InitStack1(SqStack1 &S){                 //初始化OPTR
    S.base=(ElemType1 *)malloc(STACK_INIT_SIZE*sizeof(ElemType1));     //expected')'before';'token(错误)
    if(!S.base) exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
    return OK;
}
int Push1(SqStack1 &S,ElemType1 e){           //OPTR入栈
    if(S.top-S.base>=S.stacksize){
        S.base=(ElemType1 *)realloc(S.base,(S.stacksize+STACK_INCREMENTE)*sizeof(ElemType1));         // expected')'before';'token
        if(!S.base) exit(OVERFLOW);
        S.top=S.base+S.stacksize;
        S.stacksize=S.stacksize+STACK_INCREMENTE;
    }
    *S.top++=e;
    return OK;
}
/* 需要传地址, 所有e也应该用引用*/
int Pop1(SqStack1 &S,ElemType1 &e)
{           //OPTR出栈
    if(S.base==S.top)
        return ERROR;
    e = *--S.top;
    return OK;
}
ElemType1 GetTop1(SqStack1 S)
{                //OPTR取栈顶元素
    if(S.base==S.top)
        return ERROR;
    ElemType1 e;
    e=*(S.top-1);
    return e;
}





int InitStack2(SqStack2 &S)
{                 //初始化OPND
    S.base=(ElemType2 *)malloc(STACK_INIT_SIZE*sizeof(ElemType2));
    if(!S.base) exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
    return OK;
}
int Push2(SqStack2 &S,ElemType2 e)
{           //OPND入栈
    if(S.top-S.base>=S.stacksize){
        S.base=(ElemType2 *)realloc(S.base,(S.stacksize+STACK_INCREMENTE)*sizeof(ElemType2));
        if(!S.base) exit(OVERFLOW);
        S.top=S.base+S.stacksize;
        S.stacksize=S.stacksize+STACK_INCREMENTE;
    }
    *S.top++=e;
    return OK;
}

/* 需要传地址, 所有e也应该用引用*/
int Pop2(SqStack2 &S,ElemType2 &e)
{           //OPND出栈
    if(S.base==S.top) return ERROR;
    e=*--S.top;
    return OK;
}
ElemType2 GetTop2(SqStack2 S){                //OPND取栈顶元素
    if(S.base==S.top) return ERROR;
    ElemType2 e;
    e=*(S.top-1);
    return e;
}


int IN(char c)
{
    /* 最后#做什么?是不是缺少c == 呢*/
    if(c=='+'||c=='-'||c=='*'||c=='/'||c=='^'||c=='('||c==')'||c == '#')
        return 1;
    else return 0;
}



char Precede(char d,char c)
{
    switch(c){
        case'+':switch(d)
                {
                    case'+':return '>';break;
                    case'-':return '>';break;
                    case'*':return '>';break;
                    case'/':return '>';break;
                    case'^':return '>';break;
                    case'(':return '<';break;
                    case')':return '>';break;
                    case'#':return '<';break;
                }
        case'-':switch(d)
                {
                    case'+':return '>';break;
                    case'-':return '>';break;
                    case'*':return '>';break;
                    case'/':return '>';break;
                    case'^':return '>';break;
                    case'(':return '<';break;
                    case')':return '>';break;
                    case'#':return '<';break;
                }
        case'*':switch(d)
                {
                    case'+':return '<';break;
                    case'-':return '<';break;
                    case'*':return '>';break;
                    case'/':return '>';break;
                    case'^':return '>';break;
                    case'(':return '<';break;
                    case')':return '>';break;
                    case'#':return '<';break;
                }
        case'/':switch(d)
                {
                    case'+':return '<';break;
                    case'-':return '<';break;
                    case'*':return '>';break;
                    case'/':return '>';break;
                    case'^':return '>';break;
                    case'(':return '<';break;
                    case')':return '>';break;
                    case'#':return '<';break;
                }
        case'^':switch(d)
                {
                    case'+':return '<';break;
                    case'-':return '<';break;
                    case'*':return '<';break;
                    case'/':return '<';break;
                    case'^':return '>';break;
                    case'(':return '<';break;
                    case')':return '>';break;
                    case'#':return '<';break;
                }
        case'(':switch(d)
                {
                    case'+':return '<';break;
                    case'-':return '<';break;
                    case'*':return '<';break;
                    case'/':return '<';break;
                    case'^':return '<';break;
                    case'(':return '<';break;
                    case'#':return '<';break;
                }
        case')':switch(d)
                {
                    case'+':return '>';break;
                    case'-':return '>';break;
                    case'*':return '>';break;
                    case'/':return '>';break;
                    case'^':return '>';break;
                    case'(':return '=';break;
                    case')':return '>';break;
                }
        case'#':switch(d)
                {
                    case'+':return '>';break;
                    case'-':return '>';break;
                    case'*':return '>';break;
                    case'/':return '>';break;
                    case'^':return '>';break;
                    case')':return '>';break;
                    case'#':return '=';break;
                }
    }
}


ElemType2 Operate(int a,char theta,int b)
{
    switch(theta)
    {                                   //break!!!!
        case'+':return(a+b);
        case'-':return (a-b);
        case'*':return (a*b);
        case'/':return (a/b);
        case'^':return (pow(a,b));
    }
    return OK;
}


int EvaluateExpression(){
    SqStack1 OPTR;
    SqStack2 OPND;
    InitStack1(OPTR);
    InitStack2(OPND);
    char c,theta;
    int num,a,b;
    c=getchar();
    Push1(OPTR,'#');
    while(c!='#'||GetTop1(OPTR)!='#'){
        if(!IN(c)){
            while(!IN(c))
            {
                num*=10;
                num+=(c-48);
                c=getchar();
            }
            Push2(OPND,num);}    //num='c'-48
        else
        {
            switch(Precede(GetTop1(OPTR),c))
            {
                case'<':Push1(OPTR,c);c=getchar();break;
                case'=':Pop1(OPTR,c);c=getchar();break;
                case'>':Pop1(OPTR,theta);              //theta=GetTop1(OPTR)
                        Pop2(OPND,b);Pop2(OPND,a);
                        Push2(OPND,Operate(a,theta,b));break;
            }
        }


    }
    return GetTop2(OPND);
}


int main()
{
    printf("请输入要计算的表达式:\n");
    int m;
    m=EvaluateExpression();
    printf("%d",m);
    return 0;
}
问题: 1. 宏定义不需要加分号; 2. Pop1和Pop2函数中,第二个参数都应该传地址,所以应该用&引用 3. 程序里还有其他问题,建议详见上面的代码注释
ALCATRAZ0 2017-10-19
  • 打赏
  • 举报
回复
问题都处在malloc函数的使用上,但格式应该没错才对(困惑)

64,677

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧