题主的代码问题在初始化函数里Stack* initstack(),Stack stack; 定义栈指针 stack 以后,没有动态生成栈空间,还有void push(Stack s, int x)压栈函数里做了修改,修改如下,见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <crtdbg.h>
int const maxsize = 1024;
typedef struct {
int* top; //头指针
int* base; //尾指针
int stacksize; //作为量度
}Stack;
Stack* initstack()//创建栈(初始化)
{
Stack* stack;
stack = (Stack*)malloc(sizeof(Stack)); //修改
stack->base = (int*)malloc(sizeof(int) * maxsize);//数组
stack->top = stack->base;
stack->stacksize = maxsize;
return stack;
}
int empty(Stack* s)//判断是否为空栈
{
if (s->top == s->base)
return 0;
else
return 1;
}
void push(Stack* s, int x)//压栈
{
if (s->top - s->base > s->stacksize)//修改
{
return; //修改
}
*(s->top) = x;
s->top++;
}
void pop(Stack* s)//出栈
{
printf("%c", *(--s->top));
}
void change(int number, int cet)
{
Stack* s = initstack();
int k;
char ch, t;
if (number == 0)
{
printf("转化后的%d进制数为:0\n", cet);
}
while (number)
{
k = number % cet;
if (k >= 10 && k < cet)
{
t = 'a' + cet - 11;//找出对应字母最大的
ch = t - (cet - k - 1);//找出具体的字母
}
else
{
switch (k)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:ch = k + 48; break;
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:ch = k + 55; break;
}
}
push(s, ch);
number = number / cet;
}
printf("转换后的%d进制数为:", cet);
while (empty(s))
{
pop(s);
}
//printf("压栈问题"); //修改
printf("\n");
}
int main(void)
{
int number, cet;
printf("请输入要转化的10进制数字,与需要转化的进制,中间用空格\n");
system("pause");
scanf("%d %d", &number, &cet);
system("pause");
change(number, cet);
return 0;
}