C的数据结构,栈转化10进制总是报空,代码不知道哪里出错啦,各位办一下忙

问题遇到的现象和发生背景

C的数据结构,栈转化10进制总是报空,代码不知道哪里出错啦,麻烦各位办一下忙

用代码块功能插入代码,请勿粘贴截图
#include
using namespace std;
//顺序栈结构体类型定义
typedef int SElemType;
const int STACK_INIT_SIZE = 100;
typedef struct {
    SElemType* base;
    SElemType* top;
    int stacksize;
}sqstack;
//初始化顺序栈
void init_stack(sqstack& s) {
    s.base = new SElemType[STACK_INIT_SIZE];
    if (!s.base)
        exit(-1);
    s.top = s.base;
    s.stacksize = STACK_INIT_SIZE;
}
//判断栈满
int stack_full(sqstack s) {
    if (s.top - s.base >= s.stacksize)
        return 1;
    else
        return 0;
}
//判断栈空
int stack_empty(sqstack s) {
    if (s.base = s.top)
        return 1;
    else
        return 0;
}
//入栈
void push_satck_sq(sqstack& s, SElemType x) {
    if (stack_full(s))
        cout << "The stack is full !" << endl;
    else *s.top++ = x;
}
//出栈
int pop_stack_sq(sqstack& s, SElemType& x) {
    if (stack_empty(s))
    {
        cout << "The satck is empty !" << endl;
        return 0;
    }
    else
        x = *(--s.top);
    return x;
}
//获得栈顶元素
SElemType gettop_sq(sqstack s) {
    if (stack_empty(s))
        cout << "The stack is empty !";
    else
        return *(s.top - 1);
}
//输出栈中元素
void printstack_sq(sqstack s) {
    sqstack p = s;
    if (stack_empty(p))
        cout << "The stack is empty !" << endl;
    else
    {
        while (!stack_empty(p))
        {
            cout << gettop_sq(p) << "  ";
            p.top--;
        }
    }
}

void main(){
    sqstack s;
    init_stack(s);
    int a, b;
    cout << "请输入你要转换的十进制数" << endl;
    cin >> a;
    if (a != 0)
    {
        cout << "请输入你要转换的进制(最多支持16进制)" << endl;
        cin >> b;
        while (b > 16 || b < 0)
        {
            cout << "请输入正确的进制数(请输入你要转换的进制(最多支持16进制))" << endl;
            cin >> b;
        }
        while (a != 0)
        {
            push_satck_sq(s, a % b);
            a = a / b;
        }
        printstack_sq(s);
    }
    else cout << "输出完成" << endl;
}

运行结果及报错内容

img

我想要达到的结果

运行正常

你的误区在于你这里定义的数据结构sqstack根本不是一个栈,你想一下,栈是一个能放进去多个元素的结构,那么你这里用什么来放元素呢。你这里定义的sqstack到底是什么,你这个结构体说白了就是三个int变量,而不是一个能存储多个数据的结构,无法表示成一个栈。另外你这里使用分配空间时使用数组,那么你要知道top和base就是栈的下标,而不是元素。你需要在这里面放一个数组来存储元素,而栈只是改变这些元素的位置关系而已。
象这样,把下标0作为栈底,定义top栈顶,然后data是存放数据的空间。

struct                       //定义栈的结构体
{
    int data[MAXSIZE];
    int top;
}Stack

下面代码使用纯c,仅供参考

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>

#define MAXSIZE 100
typedef struct                       //定义栈的结构体
{
    int data[MAXSIZE];
    int top;
}Stack, *pStack;

//栈的初始化
void s_init(pStack& S)
{
    S = (pStack)malloc(sizeof(Stack));
    if (S)
        S->top = -1;
}
//入栈函数
void s_push(pStack& S, int x)
{
    S->top++;
    S->data[S->top] = x;
}
//出栈函数
void s_pop(pStack& S)
{
    while (S->top != -1)
    {
        printf("%d", S->data[S->top]);
        S->top--;
    }
}
//进制转换函数
void zhuanhua(int m, int n, pStack& S)
{
    /*进制转换基本原理
    一直整除直至结果为0
    将余数push到栈中*/
    int k=0;
    while (m != 0)
    {
        k = m % n;
        s_push(S, k);
        m = m / n;
    }
}
//栈销毁函数
void s_delete(pStack& S)
{
    if (S)
        free(S);
    S = NULL;
}

int main()
{
    //初始化栈
    pStack S;
    s_init(S);

    //输入十进制数
    int a, b;
    printf("请输入你要转换的十进制数:");
    scanf("%d", &a);

    //如果输入的数是0,则输出提示退出
    if (a == 0)
    {
        printf("0就是0,无需转换\n");
        exit(0);
    }
    //否则
    else
    {
        //使用goto语句,如果输入的进制数不是1-16进制则重复执行
        shurujinzhi:
        printf("请输入你要转换的进制(最多支持16进制):");
        scanf("%d", &b);
        while (b > 16 || b < 0)
        {
            printf("请输入正确的进制数(请输入你要转换的进制(最多支持16进制)):");
            goto shurujinzhi;
        }

        //进行转换,将转换完的结果保存到S
        zhuanhua(a, b, S);

        //出栈
        s_pop(S);

        //销毁栈
        s_delete(S);
    }
    return 0;
}