m0_74832413 2023-03-31 01:08 采纳率: 100%
浏览 16
已结题

如何用栈进制转换 输出乱码?

用栈进制转换 输出乱码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#define MAXSIZE 2000
#define OVERFLOW -2
#define ERROR 0
#define OK 1
#define Status int

typedef int SELemType;
typedef struct
{
    SELemType* base;
    SELemType* top;
    int stacksize;
}SqStake;
Status InitStack(SqStake* S)
{
    S->base = (SELemType*)malloc(MAXSIZE * sizeof(SELemType));
    if (!S->base)exit(OVERFLOW);
    S->top = S->base;
    S->stacksize = MAXSIZE;
    return OK;
}
Status Push(SqStake* S, SELemType e) {
    if (S->top - S->base == S->stacksize)
        return ERROR;
    *S->top++ = e;
    return OK;



}
Status Pop(SqStake* S, SELemType* e) {
    if (S->base == S->top)
        return ERROR;
    --S->top;
    e = *S->top;
    return OK;


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



}


void conversion()
{
    SqStake S;
    SELemType h;
    InitStack(&S);
    printf("请输入非负的数:\n");
    scanf("%d", &h);
    while (h)
    {

        Push(&S, h % 8);
        h = h / 8;
    }
    SELemType e;
    while (StackEmpty(S))
    {
    
        Pop(&S, &e);
        printf("%d", e);
    }
}


void main()
{
    conversion();
    system("pause");
}

展开全部

  • 写回答

5条回答 默认 最新

  • 瓜洲大大 2023-03-31 01:21
    关注

    在 Pop 函数中,需要将传入的指针 e 解引用才能将弹出的栈顶元素赋值给它,所以需要修改 Pop 函数的实现,将 e = *S->top; 改为 *e = *(--S->top)。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    m0_74832413 2023-03-31 01:22

    这个问题解决了,但是下方警告scanf 值被忽略 sacnf 有黄色波浪线,还是输出错误

    回复
    瓜洲大大 回复 m0_74832413 2023-03-31 01:30

    警告 "值被忽略" 通常是由于使用了scanf函数但没有使用它返回的值。这可能是因为scanf函数的返回值用于检查输入是否成功,而没有检查可能会导致不可预测的行为或程序崩溃。
    可以这么改:

    if (scanf("%d", &h) != 1) {
        printf("输入错误!\n");
        exit(1); //或者直接return
    }
    
    

    1
    回复
查看更多回答(4条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月31日
  • 创建了问题 3月31日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部