帮忙改一下 C++

zhanghuizi123 2011-12-24 11:52:31
高手们,帮忙改一下;
#include "stack.h"
#include <math.h>
#include<fstream>
int change(char theta)
{
switch(theta)
{
case '+':

return 0;

break;

case '-':

return 1;

break;

case '*':

return 2;

break;

case '/':

return 3;
break;

case '(':

return 4;

break;

case ')':

return 5;

break;

case '#':

return 6;

break;

}

return 0;
}

int Precede(char theta1,char theta2)
{

int a[7][7]={3,3,1,1,1,3,3,3,3,1,1,1,3,3,3,3,3,3,1,3,3,3,3,3,3,1,3,3,1,1,1,1,1,2,0,3,3,3,3,0,3,3,1,1,1,1,1,0,2};

return(a[change(theta1)][change(theta2)]);
}
float Operate(float a,char theta,float b)
{

switch(theta)

{

case '+':

return(a+b);

break;

case '-':

return(a-b);

break;

case '*':

return(a*b);
break;

case '/':

return(a/b);

break;

}

return 0;
}

int main()

{

float number=0;

char c,x;


int dot=0;

int mark=0;

char theta;

float a,b;

stack<char> *OPTR;

stack<float> *OPND;

OPTR=InitStack <char> ();

OPND=InitStack <float> ();

fstream infile;

fstream outfile;

infile.open("input.txt",ios::in);

if(!infile)

{

cout<<"文件打开失败"<<endl;

exit(0);
}

outfile.open("output.txt",ios::out);

if(!outfile)

{
cout<<"文件打开失败"<<endl;

exit(0);

}

while(infile.get(c),!infile.eof())

{

Push <char> (OPTR,'#');

outfile<<"OPTR: ";

StackTraverse<char>(OPTR,outfile);

outfile<<"OPND: ";

StackTraverse<float>(OPND,outfile);

outfile<<"---------------------------------------------"<<endl;

while(c!='#'||GetTop <char> (OPTR)!='#')

{

while((c>='0'&&c<='9')||c=='.')

{
mark=1;

if(c=='.')

dot=1;
else

{
if(dot==0)


number=number*10+(c-48);

else

{

number=number+(c-48)*pow(10,(-dot));

dot++;

}

}

infile.get(c);

}

if(mark==1)

{

Push <float> (OPND,number);

outfile<<"OPTR: ";

StackTraverse<char>(OPTR,outfile);

outfile<<"OPND: ";

StackTraverse<float>(OPND,outfile);

outfile<<"---------------------------------------------"<<endl;

number=0;

mark=0;

dot=0;

}

switch(Precede(GetTop<char>(OPTR),c))

{

case 1:

Push<char>(OPTR,c);

outfile<<"OPTR: ";

StackTraverse<char>(OPTR,outfile);

outfile<<"OPND: ";

StackTraverse<float>(OPND,outfile);

outfile<<"---------------------------------------------"<<endl;

infile.get(c);

break;

case 2:

Pop<char>(OPTR,x);

outfile<<"OPTR: ";

StackTraverse<char>(OPTR,outfile);

outfile<<"OPND: ";

StackTraverse<float>(OPND,outfile);

outfile<<"---------------------------------------------"<<endl;

infile.get(c);

break;

case 3:

Pop<char>(OPTR,theta);

outfile<<"OPTR: ";

StackTraverse<char>(OPTR,outfile);

outfile<<"OPND: ";

StackTraverse<float>(OPND,outfile);

outfile<<"---------------------------------------------"<<endl;

Pop<float>(OPND,b);

outfile<<"OPTR: ";

StackTraverse<char>(OPTR,outfile);

outfile<<"OPND: ";

StackTraverse<float>(OPND,outfile);

outfile<<"---------------------------------------------"<<endl;

Pop<float>(OPND,a);

outfile<<"OPTR: ";

StackTraverse<char>(OPTR,outfile);

outfile<<"OPND: ";

StackTraverse<float>(OPND,outfile);

outfile<<"---------------------------------------------"<<endl;

Push<float>(OPND,Operate(a,theta,b));

outfile<<"OPTR: ";

StackTraverse<char>(OPTR,outfile);

outfile<<"OPND: ";

StackTraverse<float>(OPND,outfile);

outfile<<"---------------------------------------------"<<endl;
break;

}


}

outfile<<GetTop<float>(OPND)<<endl;

outfile<<"*********************************************"<<endl;

ClearStack<char>(OPTR);

ClearStack<float>(OPND);

}


infile.close();

outfile.close();

return 0;

}
}
}
另一个头文件:
#include<iostream>
#include<malloc.h>
#include<fstream>
using namespace std;
template <class T>
struct stack
{
T num;
stack<T> *next;
};
template <class T>
stack<T> *InitStack()
{
stack<T> *head=(stack<T> *)malloc(sizeof(stack<T>));
head->next=NULL;
return head;
}
template <class T>
void ClearStack(stack<T>* &p)
{
stack<T> *p1=p,*p2=p;
while(p1->next)
{
p1=p2->next;
free(p2);
p2=p1;
}
p2->num=0;
p=p2;
}
template <class T>
T StackEmpty(stack<T> *p)
{
if(p->next)
return 0;
else
return 1;
}
template <class T>
T StackLength(stack<T> *p)
{
T n=0;
while(p->next)
{
n++;
p=p->next;
}
return n;
}
template <class T>
T GetTop(stack<T> *p)
{
while(p->next)
p=p->next;
return p->num;
}
template <class T>
void Push(stack<T> *p,T e)
{
while(p->next)
p=p->next;
stack<T> *p1=(stack<T> *)malloc(sizeof(stack<T>));
p1->num=e;
p1->next=NULL;
p->next=p1;
}
template <class T>
void Pop(stack<T> *p,T &f)
{
T e=0;
stack<T> *p1=NULL;
while(p->next)
{
p1=p;
p=p->next;
}
e=p->num;
p1->next=NULL;
free(p);
f=e;
}
template<class T>
void StackTraverse(stack<T> *p,ostream& opt)
{
while(p->next)
{
p=p->next;
opt<<p->num<<" ";
}
opt<<endl;
}


错误为
F:\C\asd1.cpp(337) : error C2143: syntax error : missing ';' before '}'
F:\C\asd1.cpp(337) : error C2143: syntax error : missing ';' before '}'
F:\C\asd1.cpp(337) : error C2143: syntax error : missing ';' before '}'
F:\C\asd1.cpp(338) : error C2143: syntax error : missing ';' before '}'
F:\C\asd1.cpp(338) : error C2143: syntax error : missing ';' before '}'
...全文
119 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyatang123 2011-12-28
  • 打赏
  • 举报
回复
是的,多了两个括号。
zhanghuizi123 2011-12-25
  • 打赏
  • 举报
回复
找了 没找着
求帮忙
riyueming184 2011-12-25
  • 打赏
  • 举报
回复
main函数多了两个花括弧……,把最后那两个花括弧删掉。不会检查括弧比配吗?
zhanghuizi123 2011-12-25
  • 打赏
  • 举报
回复
outfile.close();
return 0;
}
-->}
}
箭头表示错误,5个错误都是这
riyueming184 2011-12-25
  • 打赏
  • 举报
回复
不知道是你贴错了还是就是这个错误:看一下main函数,结束时多了两个大括弧。
liyatang123 2011-12-25
  • 打赏
  • 举报
回复
这么长的代码要找错误时最好在编译器中找,贴在网页上的不好看。
你可以先用编译器的错误定位功能先找一下位置,在将找到的位置上下几行贴出来,这样大家好帮你找问题。
黯然 2011-12-24
  • 打赏
  • 举报
回复
这么长..流的也不熟...
看错误提示好像是少;(分号)吧,自己找找吧...

64,679

社区成员

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

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