求大伙儿指点一下

求大家指点一下
# include<stdio.h>
# define sizemax 100
typedef int elemtype ;
typedef struct
{
elemtype data[sizemax];
int top;
}seqstack;

void intistack(seqstack *p)
{
p->top=-1;
}

elemtype IsEmpty(seqstack *p)
{
return p->top==-1;
 
}
void push(seqstack *p,elemtype e)
{
    if(!IsEmpty(p))
p->data[++p->top]=e;
// printf("%d",p->data[p->top]);

}

elemtype pop(seqstack *p)
{  
if(IsEmpty(p))
{
printf("栈已空\n");
return -1;
}
return p->data[p->top--];

}

void output(seqstack *p)
{
    while(!IsEmpty(p))
    printf("%d",pop(p));

}
void main()
{
int i,n;
seqstack p;
intistack(&p);
printf("任意输入一个十进制数:");
scanf("%d",&i);
printf("任意输入一个你要转换的进制:");
scanf("%d",&n);
while(i)
{

push(&p,i%n);
    i=i/n;
}
output(&p);

}
     

运行结果没有,好像是进栈哪里出错了,我加了个printf时候,输出的值就有问题,不知道哪里出错了

------解决方案--------------------
语义错误,我给你改好然后重新排版了一下

问题在于 push 方法。你原先的写法是:如果栈不是空的,那么向栈中压入一个数据。
因为栈的初始状态是空,所以你永远不会向栈中添加任何数据。把这个判断删掉就好了。


#include<stdio.h>

#define sizemax 100

typedef int elemtype;

typedef struct
{
elemtype data[sizemax];
int top;
} seqstack;

void intistack(seqstack *p)
{
p->top = -1;
}

elemtype IsEmpty(seqstack *p)
{
return p->top == -1;
}

void push(seqstack *p, elemtype e)
{
p->data[++p->top] = e;
}

elemtype pop(seqstack *p)
{
if(IsEmpty(p))
{
printf("栈已空\n");
return -1;
}
return p->data[p->top--];
}

void output(seqstack *p)
{
while(!IsEmpty(p))
printf("%d", pop(p));
}

void main()
{
int i,n;
seqstack p;
intistack(&p);
printf("任意输入一个十进制数:");
scanf("%d", &i);
printf("任意输入一个你要转换的进制:");
scanf("%d", &n);
while(i)
{
push(&p, i % n);
i = i / n;

output(&p);
}

------解决方案--------------------
引用:
语义错误,我给你改好然后重新排版了一下

问题在于 push 方法。你原先的写法是:如果栈不是空的,那么向栈中压入一个数据。
因为栈的初始状态是空,所以你永远不会向栈中添加任何数据。把这个判断删掉就好了。

C/C++ code?1234567891011121314151617181920212223242526272829303132333435363738……

++