入栈成功,出栈为什么会乱码

#include
#include
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10//存储空间分配增量
typedef struct
{
int base;//在栈构造和销毁之后,base的值为NULL
int *top;//栈顶指针
int stacksize;//当前栈已分配的存储空间,以元素为单位
}Sqstack;
void InitStack(Sqstack &S)//构造一个空栈
{
S.base = (int *)alloca(STACK_INIT_SIZE*sizeof(int));
if (!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE; //存储空间初始分配量100
}
bool Push(Sqstack &S, int e)
{
//插入元素e作为栈顶元素
if (S.top - S.base >= S.stacksize)//栈满追加存储空间
{
S.base = (int *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(int));
if (!S.base) { exit(OVERFLOW); return false; }//分配失败
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++= e;
return true;
}//push
bool Pop(Sqstack &S, int &e)
{
//若栈不空则删除栈顶元素,用e返回值,返回true,否则返回false
if (S.top == S.base) return false;//空栈
e = *--S.top;
return true;
}//pop
bool IsEmpty(Sqstack S)
{
//判断栈是否为空
if (S.top == S.base)return true;
return false;
}
void Conversion(int x)
{
//转换10进制数
Sqstack S;
int temp;
InitStack(S);//构造空栈
if (x == 0)printf("0");
else
{
while (x)
{
Push(S, x % 2);
x /= 2;
}//将10进制数短除,入栈
while (!IsEmpty(S))
{
Pop(S, temp);
printf("%d", temp);
}//逆序输出
}
putchar(10);
}//Conversion
int main()
{
printf("
*************非递归算法**************\n");
for (int i = 0; i < 16; i++)
Conversion(i);
system("pause");
return 0;
}

 #include<iostream>
#include<stdio.h>
#include<malloc.h>
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10//存储空间分配增量
#define OVERFLOW 1
typedef struct
{
    int *base;//在栈构造和销毁之后,base的值为NULL
    int *top;//栈顶指针
    int stacksize;//当前栈已分配的存储空间,以元素为单位
}Sqstack;
void InitStack(Sqstack &S)//构造一个空栈
{
    S.base = (int *)alloca(STACK_INIT_SIZE*sizeof(int));
    if (!S.base) exit(OVERFLOW);
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE; //存储空间初始分配量100
}
bool Push(Sqstack &S, int e)
{
    //插入元素e作为栈顶元素
    if (S.top - S.base >= S.stacksize)//栈满追加存储空间
    {
        S.base = (int *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(int));
        if (!S.base) { exit(OVERFLOW); return false; }//分配失败
        S.top = S.base + S.stacksize;
        S.stacksize += STACKINCREMENT;
    }
    *S.top++= e;
    return true;
}//push
bool Pop(Sqstack &S, int &e)
{
    //若栈不空则删除栈顶元素,用e返回值,返回true,否则返回false
    if (S.top == S.base) return false;//空栈
    e = *--S.top;
    return true;
}//pop
bool IsEmpty(Sqstack S)
{
    //判断栈是否为空
    if (S.top == S.base)return true;
    return false;
}
void Conversion(int x)
{
    //转换10进制数
    Sqstack S;
    int temp;
    InitStack(S);//构造空栈
    if (x == 0)printf("0");
    else
    {
        while (x)
        {
            Push(S, x % 2);
            x /= 2;
        }//将10进制数短除,入栈
        while (!IsEmpty(S))
        {
            Pop(S, temp);
            printf("%d", temp);
        }//逆序输出
    }
    putchar(10);
}//Conversion
int main()
{
    printf("**************非递归算法**************\n");
    for (int i = 0; i < 16; i++)
    Conversion(i);
    system("pause");
    return 0;
}

**************非递归算法**************
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
Press any key to continue . . .