#无法打印出栈数据
#
#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。这样可以正确获取栈顶值并将其弹出,避免了类型不匹配的问题。