我有一个作业,要求我创建一个程序,该程序逐个字符地扫描一个字符串,如果该字符是一个数字,则将该数字放在堆栈中,但是如果它是一个操作符,则从中提取2个元素堆栈,操作的结果被压入堆栈,在程序结束时,堆栈中唯一剩下的东西必须是最终结果。教授告诉我们使用两个特定的函数void push(int stack [], int * t,int obj);和pop(int stack [],int * t);我对此有些陌生,所以我希望对当前代码应解决的问题发表一些评论。谢谢
#include"mystack.h"
#include<stdio.h>
#include<ctype.h>
#define MAX 100
int arr[MAX],stac[MAX];
int i,add,di,mul,sub,*tp;
char c;
int main()
{
*tp = -1;
add = pop(stac,&tp) + pop(stac,&tp);
sub = pop(stac,&tp) - pop(stac,&tp);
mul = pop(stac,&tp) * pop(stac,&tp);
di = pop(stac,&tp) + pop(stac,&tp);
while(1) {
c = getchar();
return c;
if (isdigit(c)) {
arr[i] = (int)c;
}
else if(c == '+') {
push(stac,&tp,add);
}
else if(c == '-') {
push(stac,&tp,sub);
}
else if(c == '*') {
push(stac,&tp,mul);
printf("Result is=%d\n");
}
else if(c == '/') {
push(stac,&tp,di);
}
else if(c == '\n') {
break;
}
else{
printf("Unknown command\n");
}
i++;
}
return 0;
}
功能体在另一个程序中,
void push(int stack[], int *t, char obj)
{
if ((*t) == (N-1))
{
printf("ERROR! Stack overflow...\n");
getchar();
abort();
}
else {
stack[++(*t)] = obj;
}
}
void pop(int stack[], int *t)
{
char r;
if ((*t) < 0)
{
printf( "ERROR! Empty stack, unable to pop...\n" );
getchar();
abort();
}
else {
r=stack[(*t)--];
}
}
这有一些错误,我不知道该如何解决,所以它无法运行。