麻烦帮帮忙!想了好久真的想不出来为什么了!
我抄的标准答案:(重点代码是post_fix()那一段)
using namespace std;
#include<iostream>
#define MAXSIZE 100
#define ERROR 0
#define OK 1
#define OVERFLOW -1
typedef double SElemType;
typedef int Status;
typedef struct {
SElemType* base;
SElemType* top;
int stacksize;
}SqStack;
Status InitStack(SqStack& S) {
S.base = new SElemType[MAXSIZE]; //为顺序栈分配一个最大容量为MAXSIZE的数组空间
if (!S.base)exit(OVERFLOW); //存储分配失败
S.top = S.base; //top初始为base,空栈
S.stacksize = MAXSIZE; //stacksize置为栈的最大容量MAXSIZE
return OK;
}
Status Push(SqStack& S, SElemType e) {
if (S.top - S.base == S.stacksize) return ERROR;
*S.top++ = e; //元素e压入栈顶,栈顶指针+1
return OK;
}
Status Pop(SqStack& S, SElemType& e) {
if (S.top == S.base)return ERROR;
e = *--S.top; //栈顶指针-1,将栈顶元素赋给e
return OK;
}
SElemType GetTop(SqStack& S) {
if (S.top != S.base) {
return *(S.top - 1); //返回栈顶元素的值,栈顶指针不变
}
}
double post_fix() {
SqStack OPND;
InitStack(OPND);
double num = 0.0;
int ch = getchar();
while (ch != '$') {
int i = 0;
char data[MAXSIZE];
while ((ch >= '0' && ch <= '9') || ch == '.') { //拼数,读入的数字或者小数点依次保留在data数组
data[i] = ch;
i++;
ch = getchar();
}
num = atof(data); //将字符串转化成浮点数
Push(OPND, num);
double a,b;
switch (ch) {
case ' ': break;
case '+':Pop(OPND, b); Pop(OPND, a); Push(OPND, a + b); cout << a << b <<a+b<<endl;break;
case '-':Pop(OPND, b); Pop(OPND, a); Push(OPND, a - b); break;
case '*':Pop(OPND, b); Pop(OPND, a); Push(OPND, a * b); break;
case '/':Pop(OPND, b); Pop(OPND, a); Push(OPND, a / b); break;
}
ch = getchar();
}
return GetTop(OPND);
}
int main() {
SqStack S;
InitStack(S);
cout<<post_fix();
return 0;
}
比如我输入3 4 +,cout << a << b <<a+b<<endl;代码会输出448,就是a=4,b=4,a+b=8,但是最后返还的还是4
真不知道是为什么,帮帮忙谢谢了!