Twistzz.965 2022-10-21 15:30 采纳率: 40%
浏览 32
已结题

用c语言写一个栈的进制转换所出现的问题

问题遇到的现象和发生背景 用c语言写一个栈的进制转换
用代码块功能插入代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>
int const maxsize=1024;

typedef struct{
    int *top;  //头指针
    int *base;   //尾指针
    int stacksize;  //作为量度
}Stack;

Stack *initstack()//创建栈(初始化)
{
    Stack *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)
{
    *(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);
        
}


运行结果及报错内容 结果不输出转换后的进制数
我的解答思路和尝试过的方法 之前用一个指针与直接定义数组正确做答
我想要达到的结果 能用这种方式正常输出
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-10-21 17:06
    关注

    题主的代码问题在初始化函数里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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月29日
  • 已采纳回答 10月21日
  • 创建了问题 10月21日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度