中南大学吧 关注:523,872贴子:19,067,523
  • 2回复贴,共1

计算器模拟程序出错了,求大神!!

只看楼主收藏回复

#include <stdlib.h>
#include<iostream.h>
Const MAX=1000;
class calculator;
{ private:
struct save1 //存储数字
{ double n[MAX]; int top; }
stack1;
struct save2 //存储运算符
{ char n[MAX]; int top; }
stack2;
public:
calculator(){}; //空的构造函数
bool stack1empty(save1 s);
bool stack2empty(save2 s);
void push1(save1 &s,double num);
void push2(save2 &s,char op);
void pop1(save1 &s,double &num);
void pop2(save2 &s,char &op);
int in(char op);
int out(char op);
void count(double a,char op,double b);
void cal();
};
bool calculator::stack1empty(save1 s) //判断数字栈是否为空
{
if(s.top==-1) return 1;
else return 0; }
bool calculator::stack2empty(save2 s)//判断运算符栈是否为空
{
if(s.top==-1) return 1;
else return 0; }
void calculator::push1(save1 &s,double num)//将数据压入数字栈
{
if(s.top==MAX-1) {cout<<"栈已满 "; }
else { s.top++; s.n[s.top]=num; }
}
void calculator::push2(save2 &s,char op)//将运算符压入运算符栈
{ if(s.top==MAX-1) {cout<<"栈已满"; }
else { s.top++; s.n[s.top]=op; }
}
void calculator::pop1(save1 &s,double &num)//将栈顶的数据元素取出,存放在num中
{ if(s.top==-1) cout<<"栈为空"<<endl;
else { num=s.n[s.top]; s.top--; }
}
void calculator::pop2(save2 &s,char &op)//将栈顶的运算符取出,存放在op中
{ if(s.top==-1) cout<<"栈为空"<<endl;
else { op=s.n[s.top]; s.top--; }
}
int calculator::in(char op)//在栈内优先级的判断
{ if(op=='-'||op=='+') return 2;
else if(op=='*'||op=='/') return 4;
else return -1;
}
int calculator::out(char op)//早栈外优先级的判断
{ if(op=='-'||op=='+') return 1;
else if(op=='*'||op=='/') return 3;
else return -1; }
void calculator::count(double a,char op,double b)//进行计算并将所得的结果压入栈顶
{ double sum;
switch (op)
{ case '+':sum=a+b;break;
case '-':sum=a-b;break;
case '*':sum=a*b;break;
case '/':sum=a/b;break;
default:break; }
push1(stack1,sum);
}
void calculator::cal(void)
{ int i=0,j;
double a,b,c;
char expression[MAX],operate,temp[20];
cout<<"请输入表达式(输完之后请加=):";
cin>>expression;
stack1.top=-1;//清空数字栈
stack2.top=-1;//清空运算符栈
while(expression[i]!='=')//以=号结尾
{ if(isdigit(expression[i]))/*若读入的字符为数字,则继续判断下一个字符,直到下个字符不是数字或者不是小数点,即可保证该操作数是完整的小数,然后将该数入操作数栈*/
{ j=0;
while(isdigit(expression[i])||expression[i] =='.')
{ temp[j++]=expression[i];
i++;
}
temp[j]='\0';
c=atof(temp);//char类型进行转换
push1(stack1,c);
}
else { if(expression[i]=='-'||expression[i]=='+'||expression[i]=='*'||expression[i]=='/')//若读入的字符为运算符的情况
{
if(in(stack2.n[stack2.top])<o
else ut(expression[i])||stack2empty(stack2))//读入的运算符与运算符栈顶元素相比,并进行相应的操作
{ push2(stack2,expression[i]);
i++; }
{
pop1(stack1,a);
pop1(stack1,b);
pop2(stack2,operate);
count(b,operate,a);//先进后出原则
}
}
} }
while(stack2.top!=-1)//读入结束后,继续进行操作,直到运算符栈为空
{ pop1(stack1,a);
pop1(stack1,b);
pop2(stack2,operate);
count(b,operate,a);
}
cout<<stack1.n[stack1.top]<<endl;
}
int main(){
cout<<"-------------欢迎使用本系统------------"<<endl;
calculator cp;
cp.cal();
cout<<"继续计算吗?"<<endl;
cout<<"Y(是),N(否),A(退出)"<<endl;
char choice;
cout<<"请输入你的选择:";
cin>>choice;
while(choice!='A')
{
if(choice=='Y')
{
system("cls"); //全清除
goto part1;
}
else
{ cout<<"---------谢谢使用!----------"<<endl;
break;
}
}
return 0;
}
报错:
F:\代码\5.cpp(3) : error C2146: syntax error : missing ';' before identifier 'MAX'
F:\代码\5.cpp(3) : error C2501: 'Const' : missing storage-class or type specifiers
F:\代码\5.cpp(3) : fatal error C1004: unexpected end of file found


IP属地:广东1楼2014-06-17 16:08回复
    看不懂


    IP属地:河南来自手机贴吧2楼2018-10-16 22:13
    回复
      这种问题不到stack overflow去问,居然来贴吧?


      来自Android客户端3楼2018-10-17 06:53
      回复