用栈实现十进制转二进制

#无法打印出栈数据
#

#include
#include
#include//realloc 
#include

#define Status int
#define OK  1
#define ERROR  0 
#define OVERFLOW -2

#define STACK_INIT_SIZE 100
#define STACKINCREMENT   //stackincrement

//自定义数据类型
typedef int SElemType;
 
typedef struct
{
    SElemType *base;
    SElemType  *top;
    int stacksize;
}SqStack;


//构造一个空栈
Status InitStack(SqStack *S)
{
    S->base = (SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if( !S->base )exit(OVERFLOW);
    S->top=S->base;
    S->stacksize=STACK_INIT_SIZE;
    return OK;

}


//入栈
Status Push(SqStack *S , SElemType e)
{
    if((S->top - S->base) >= S->stacksize)
    {
        return ERROR;
    }
    /*{
        S->base = (SElemType * )realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof (SElemType));
        if (!S->base)exit(OVERFLOW);
    S->top = S->base + S->stacksize;
    S->stacksize+=STACKINCREMENT;
    }*/
    *S->top++=e;
    return OK;
} 

//出栈
Status Pop(SqStack* S, SElemType* e)
{
    if(S->top==S->base)
    {
        return ERROR;
    }
    e = * --S->top;
    return OK;
 } 
 
//判断是否为空栈 
Status StackEmpty(SqStack S)
{
    if(S.top==S.base)
        return ERROR;
    else
        return OK;
}


//功能:将十进制数转换为八进制数
void conversion()
{
    SqStack S;
    SElemType N;
    InitStack(&S);
    printf("请输入非负的数:\n"); 
    scanf("%d",&N); 
    while(N)
    {
        
        Push(&S,N%8);
        N=N/8;
     } 
    SElemType e;
    while (StackEmpty(S))
    {
        //printf("text");
        Pop(&S,e);
        printf("%d",e);
    }
 } 
 
 
int main()
{
    printf("欢迎使用进制数转换程序!!\n") ;
    conversion();
    system("pause");
}

61 4 [Warning] assignment makes pointer from integer without a cast
In function 'conversion':
93 10 [Warning] passing argument 2 of 'Pop' makes pointer from integer without a cast
55 8 [Note] expected 'SElemType *' but argument is of type 'SElemType'

参考GPT和自己的思路:关于第一个问题,程序中没有涉及到栈数据的打印,所以无法打印出栈数据是正常的现象,不需要处理。

关于第二个问题,在函数Pop中传递参数e时,需要传递SElemType类型的指针,而代码中传递的是SElemType类型的变量,可以将函数声明修改为Status Pop(SqStack* S, SElemType* e),同时在函数中使用*e来修改指针所指向的变量。

关于第三个问题,在函数Pop中,应该将* --S->top作为一个整体赋值给e,即*e = * --S->top。这样可以正确获取栈顶值并将其弹出,避免了类型不匹配的问题。