在C-Free上运行时为什么输出不了出栈的值?

#include
#include

typedef struct StackLNode//用于即将加入栈的节点
{
int date;
struct StackLNode*next;
}StackLNode,*StackList;
typedef struct StackPoint//栈本身
{
StackList top;
int count;
}StackPoint;
void Intivital(StackPoint *stackpoint);
void InStack(StackPoint *stackpoint,int pushNumber);
void Output(StackPoint *stackpoint);
int PutStack(StackPoint *stackpoint);
int main()
{

StackPoint *stackpoint;
Intivital(stackpoint);

for(int i=0;i<10;i++)
InStack(stackpoint,i);
printf("\n");
Output(stackpoint);
printf("\n入栈完成\n");
printf("%d\n",PutStack(stackpoint)); //输出出栈的返回值

}
void Intivital(StackPoint *stackpoint)//头指针的初始化
{
stackpoint->count=0;
}
void InStack(StackPoint *stackpoint,int pushNumber)//入栈
{
StackList stacklist=(StackList)malloc(sizeof(StackLNode));
stacklist->date=pushNumber;
stacklist->next=stackpoint->top;
stackpoint->top=stacklist;
stackpoint->count++;
printf("%d\t",stacklist->date);
}
void Output(StackPoint *stackpoint)//输出栈中的内容
{
StackPoint *stackpoint_1=stackpoint;
for(int i=0;icount;i++)
{
printf("%d\t",stackpoint_1->top->date);
stackpoint_1->top=stackpoint_1->top->next;
}

}
int PutStack(StackPoint *stackpoint)//出栈
{
int getNumber=2;
printf("%d",getNumber);
getNumber=stackpoint->top->date;

stackpoint->top=stackpoint->top->next; 
stackpoint->count--;
printf("出栈完成!\n");
return getNumber;

}

图片说明

程序错误太多,帮你修改了,问题解决请点采纳

程序最大的问题是Output函数里会修改top,导致链表指向结尾(相当于已经出栈了一次),所以再出栈就错了,还有各种小错误,自己对照下,就不解释了。

// Q769244.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


#include<stdio.h> 
#include<malloc.h>

typedef struct StackLNode//用于即将加入栈的节点 
{
int date;
struct StackLNode*next;
}StackLNode,*StackList;
typedef struct StackPoint//栈本身 
{
StackList top;
int count;
}StackPoint;
void Intivital(StackPoint *stackpoint);
void InStack(StackPoint *stackpoint,int pushNumber);
void Output(StackPoint *stackpoint);
int PutStack(StackPoint *stackpoint);
int main()
{
    StackPoint sp;
    sp.top = NULL;
StackPoint *stackpoint = &sp;
Intivital(stackpoint);

for(int i=0;i<10;i++)
InStack(stackpoint,i);
printf("\n");
Output(stackpoint);
printf("\n入栈完成\n");
printf("%d\n",PutStack(stackpoint)); //输出出栈的返回值
}
void Intivital(StackPoint *stackpoint)//头指针的初始化
{
stackpoint->count=0; 
}
void InStack(StackPoint *stackpoint,int pushNumber)//入栈
{
StackList stacklist=(StackList)malloc(sizeof(StackLNode));
stacklist->date=pushNumber;
stacklist->next=stackpoint->top;
stackpoint->top=stacklist;
stackpoint->count++;
printf("%d\t",stacklist->date);
}
void Output(StackPoint *stackpoint)//输出栈中的内容
{
StackList p=stackpoint->top;
for(int i=0;i < stackpoint->count;i++)
{
printf("%d\t",p->date);
p=p->next;
}

}
int PutStack(StackPoint *stackpoint)//出栈
{ 
//int getNumber=2; 
//printf("%d",getNumber);
int getNumber=stackpoint->top->date;
stackpoint->top=stackpoint->top->next; 
stackpoint->count--;
printf("出栈完成!\n");
return getNumber;
}