怎么处理?用栈实现数制转换,为啥会出现数字和其他符号?用codeblock编译的,帮小弟我看看

怎么办???用栈实现数制转换,为啥会出现数字和其他符号?用codeblock编译的,帮我看看。
//栈。数制转换,十进制转换为二、八、十六进制。


怎么处理?用栈实现数制转换,为啥会出现数字和其他符号?用codeblock编译的,帮小弟我看看
怎么处理?用栈实现数制转换,为啥会出现数字和其他符号?用codeblock编译的,帮小弟我看看

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

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

typedef struct
{
    char *base;
    char *top;
    int stacksize;
}SqStack;

int InitStack(SqStack &S)
{
    S.base = (char *)malloc(STACK_INIT_SIZE * sizeof(char));
    if(!S.base) return 0;
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE;
    return 1;
}

int StackEmpty(SqStack &S)
{
    if(S.base == S.top) return 1;
    else return 0;

}

int Push(SqStack &S,char e)
{
    if(S.top - S.base >= S.stacksize)
    {
        S.base = (char *)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(char));
        if(!S.base) return 0;
        S.top = S.base + S.stacksize;
        S.stacksize += STACKINCREMENT;
    }
    *S.top++ = e;
    return 1;
}

int Pop(SqStack &S)
{
    char e;
    if(S.top == S.base) return 0;
    e = *--S.top;
    return e;
}

void conversion()
{
    SqStack S;
    int N,M;
    char e;
    InitStack(S);
    scanf("%d %d",&N,&M);
    while(N)
    {
        int t;
        t = N%M;
        Push(S,t);
        N = N / M;
        if(t < 10)
            *S.top++='0'+t;
        else
            *S.top++='A'+t-10;
    }
    while(!StackEmpty(S))
    {
        e = Pop(S);
        printf("%c",e);
    }

}

int main()
{
    conversion();
    return 0;
}
c

------解决方案--------------------
int强转为char,实际上是转换成ASIIC码为该整数的字符

while里面的代码有问题,应该这样

char t;
t = N%M;
if(t < 10)
    t='0'+t;
else
    t='A'+t-10;
Push(S,t);
N = N / M;

------解决方案--------------------
我只想说 为什么不用字符串

假设栈中数字为i

printf("%c","01234567"[i]);
这是八进制  十六进制同理 

你的简直麻烦爆了
------解决方案--------------------
 int t;
        t = N%M;
        Push(S,t);
        N = N / M;
        if(t < 10)
            *S.top++='0'+t;
        else
            *S.top++='A'+t-10;
同时压入数字本身和对应的十六进制字符。
当然一块显示了