空名_Noname 2020-06-09 23:44 采纳率: 50%
浏览 178
已采纳

求助,新人,用的C,为什么我这样输出不正确?

萌新,学了以C++为基础的数据结构,用C++没问题,类似的代码修改C出错了,不知错在哪,求大佬帮忙
//用栈将十进制转换为八进制
//C
#include<stdio.h>
#define MAXSIZE 99
typedef int Status;
typedef struct 
{
    int *base;
    int *top;
    int stacksize;
}SqStack;

SqStack S;//全局变量

Status InitStack()//初始化栈
{
    int num[MAXSIZE];
    S.top = S.base = num;
    S.stacksize = MAXSIZE;
    return 1;
}

Status Push(int e)//入栈
{
    if (S.top - S.base == S.stacksize) return 0;
    *(S.top) = e;
    S.top++;
    return 1;
}

Status Pop()//出栈
{
    int num;
    if (S.top == S.base) return 0;
    num = *--(S.top);
    return num;
}

Status conversion(int N)
{
    InitStack();
    while (N)
    {
        Push(N % 8);
        N = N / 8;
    }
    printf_s("输出八进制的数:");
    while (S.top != S.base)
    {
        printf_s("%d", Pop());
    }
}

int main()
{
    int D;
    printf_s("输入一个十进制的数:");
    scanf_s("%d", &D);
    if (D > 0)
        conversion(D);
    else
        printf_s("ERROR\n");
    system("pause");
}

入栈有问题,不知是什么问题

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-06-10 00:07
    关注

    只听说scanf_s,没有听说过print_s
    而且scanf_s也只有vc++支持。
    修改后的代码

    #include<stdio.h>
    #define MAXSIZE 99
    typedef int Status;
    typedef struct 
    {
        int *base;
        int *top;
        int stacksize;
    }SqStack;
    
    SqStack S;//全局变量
    
    Status InitStack()//初始化栈
    {
        int num[MAXSIZE];
        S.top = S.base = num;
        S.stacksize = MAXSIZE;
        return 1;
    }
    
    Status Push(int e)//入栈
    {
        if (S.top - S.base == S.stacksize) return 0;
        *(S.top) = e;
        S.top++;
        return 1;
    }
    
    Status Pop()//出栈
    {
        int num;
        if (S.top == S.base) return 0;
        num = *--(S.top);
        return num;
    }
    
    Status conversion(int N)
    {
        InitStack();
        while (N)
        {
            Push(N % 8);
            N = N / 8;
        }
        printf("输出八进制的数:");
        while (S.top != S.base)
        {
            printf("%d", Pop());
        }
    }
    
    int main()
    {
        int D;
        printf("输入一个十进制的数:");
        scanf("%d", &D);
        if (D > 0)
            conversion(D);
        else
            printf("ERROR\n");
    }
    

    问题解决的话,请点下采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器