WFR 发表于 2020-5-15 20:08:37

为什么只能得到栈已经满了???

//本次作业目的:将十进制的数转化为二进制,八进制或十六进制
#include <stdio.h>
typedef struct
{
        int A;
        int top;
}stack;
void iniStack(stack *S);//初始化栈
int Push(stack *S, intx);//压栈
int Pop(stack *S, int *x);//出栈
int EmptyStack(stack *S);//判栈空
void DecToOthers(int n, int b);//进行进制间的转换

int main()
{
        int i ,j;
        printf("请输入一个十进制的数字:");
        scanf("%d", &i);
        DecToOthers(i, 2);
        return 0;
}
void iniStack(stack *S)//初始化栈
{
        S->top = -1;
}
int Push(stack *S, intx)//压栈
{
        if (S->top = 9)
        {
                printf("栈中的数据已经满了\n");
                return 0;
        }
        S->top++;
        S->A = x;
        return 1;
}
int Pop(stack *S, int *x)//出栈
{
        if (EmptyStack(S))
        {
                printf("栈是空的");
                return 0;
        }
        else
        {
                x = S->A;
                S->top--;
                return 1;
        }
}
int EmptyStack(stack *S)//判栈空
{
        return(S->top == -1);
}
void DecToOthers(int n, int b)//进行进制间的转换
{
        char M[] = "abcdefg";
        stack Z;
        int x ,i;
        iniStack(&Z);
        while (n)
        {
                Push(&Z, n%b);
                if (n > 9)
                {
                        i = n - 9;
                        n = M;
                }
                n = n/b;
        }
        while (EmptyStack(&Z))
        {
                Pop(&Z, &x);
                printf("%d", x);
        }
}

qiuyouzhi 发表于 2020-5-15 20:11:01

请 不 要 重 复 发 帖

WFR 发表于 2020-5-15 20:34:33

qiuyouzhi 发表于 2020-5-15 20:11
请 不 要 重 复 发 帖

可是不重复发帖,根本就没人理

qiuyouzhi 发表于 2020-5-15 20:35:53

本帖最后由 qiuyouzhi 于 2020-5-15 20:37 编辑

WFR 发表于 2020-5-15 20:34
可是不重复发帖,根本就没人理

没人理也不能重复发帖,但你可以换个论坛问问

qiuyouzhi 发表于 2020-5-15 20:39:12

算了,帮你改了一下
原因是Push那里==写成=了
//本次作业目的:将十进制的数转化为二进制,八进制或十六进制
#include <stdio.h>
typedef struct
{
      int A;
      int top;
}stack;
void iniStack(stack *S);//初始化栈
int Push(stack *S, intx);//压栈
int Pop(stack *S, int *x);//出栈
int EmptyStack(stack *S);//判栈空
void DecToOthers(int n, int b);//进行进制间的转换

int main()
{
      int i ,j;
      printf("请输入一个十进制的数字:");
      scanf("%d", &i);
      DecToOthers(i, 2);
      return 0;
}
void iniStack(stack *S)//初始化栈
{
      S->top = -1;
}
int Push(stack *S, intx)//压栈
{
      if (S->top == 9)
      {
                printf("栈中的数据已经满了\n");
                return 0;
      }
      S->top++;
      S->A = x;
      return 1;
}
int Pop(stack *S, int *x)//出栈
{
      if (EmptyStack(S))
      {
                printf("栈是空的");
                return 0;
      }
      else
      {
                x = S->A;
                S->top--;
                return 1;
      }
}
int EmptyStack(stack *S)//判栈空
{
      return(S->top == -1);
}
void DecToOthers(int n, int b)//进行进制间的转换
{
      char M[] = "abcdefg";
      stack Z;
      int x ,i;
      iniStack(&Z);
      while (n)
      {
                Push(&Z, n%b);
                if (n > 9)
                {
                        i = n - 9;
                        n = M;
                }
                n = n/b;
      }
      while (EmptyStack(&Z))
      {
                Pop(&Z, &x);
                printf("%d", x);
      }
}
还有问题,我继续改改

WFR 发表于 2020-5-15 20:48:10

qiuyouzhi 发表于 2020-5-15 20:39
算了,帮你改了一下
原因是Push那里==写成=了



大哥还有输出的地方有错误少个!

WFR 发表于 2020-5-15 21:03:24

WFR 发表于 2020-5-15 20:48
大哥还有输出的地方有错误少个!

怎么进行转化为十六进制的运算
页: [1]
查看完整版本: 为什么只能得到栈已经满了???