棺材 发表于 2011-8-8 08:55:43

用栈写的任意进制转化有点问题!请大家看看啊!

#include <stdio.h>//本题思想是体会栈的用法及用栈事改主意的事项!当然也可以用数组OR线表来实现
#include<malloc.h>
#define kaipi 100
typedef struct
{
int *top;
int *base;
int chang;
}zhan;
int chushi(zhan *z)
{
z->base=(int *)malloc(kaipi*sizeof(int));
   if(!z->base)
   {
    printf("开辟失败!日!空间怎么怎么快就用完了!垃圾PC赶快丢了吧买新的!!!");
    return 0;
   }
   z->top=z->base;
   z->chang=kaipi;
   return 0;
}
int jinzhan(zhan *z,int shu,int jin)
{
if((z->top)-(z->base)==(z->chang))
{
printf("额!栈的空间已经用完了要开辟增加新的空间了!不然就要产出上溢了!我们还是让PC要增加新的空间吧O(∩_∩)O~!请输入要增加的空间大小!");
int xin;
scanf("%d",&xin);
z->base=(int *)realloc(z->base,(shu+xin)*sizeof(int));
if(!z->base)
{
   printf("开辟失败!日!空间怎么怎么快就用完了!垃圾PC赶快丢了吧买新的!!!");
   return 0;
}
z->top=z->base+shu;
z->chang=shu+xin;
}
while(shu)
{
*(z->top)=shu%jin;
z->top++;
shu=shu/jin;
}
return 0;
}
int chuzhan(zhan *z)
{
if(z->top==z->base)
{
printf("如果程序在运行就要产生下益了!!!还是让PC停止吧!!!O(∩_∩)O~");
return 0;
}
while(z->top!=z->base)
{
if(*(--(z->top))<10)
   printf("%d",z->top);
else
   *(z->top)=*(z->top)-10+65;
   printf("%d",z->top);
}
printf("\n");
free(z);
return 0;
}
void main()
{
int shu,jin;
zhan z;
printf("请输入你要转换的数字");
scanf("%d",&shu);
printf("请输入你想转换的进制");
scanf("%d",&jin);
chushi(&z);
jinzhan(&z,shu,jin);
chuzhan(&z);
}

Be_envious 发表于 2011-8-8 12:46:52

看着指针就头疼malloc这个东西我只要调用就没说能正常编译过去的

棺材 发表于 2011-8-8 13:56:18

:lol经过我的努力我已经改好了嘿嘿!
#include <stdio.h>//本例要求掌握是在用栈时应该主要的事项!如果闲代码长可以用数组写
#include<malloc.h>
#define kaipi 100
typedef struct
{
        int *top;
        int *base;
        int chang;
}zhan;
int chushi(zhan *z)
        {
                z->base=(int *)malloc(kaipi*sizeof(int));
                        if(!z->base)
                        {
                                printf("开辟失败!日!空间怎么怎么快就用完了!垃圾PC赶快丢了吧买新的吧!!!");
                                return 0;
                        }
                        z->top=z->base;
                        z->chang=kaipi;
                        return 0;
        }
int jinzhan(zhan *z,int shu,int jin)
{
        if((z->top)-(z->base)==(z->chang))
        {
                printf("额!栈的空间已经用完了要开辟增加新的空间了!不然就要产出上溢了!我们还是让PC要增加新的空间吧O(∩_∩)O~!请输入要增加的空间大小!");
                int xin;
                scanf("%d",&xin);
                z->base=(int *)realloc(z->base,(shu+xin)*sizeof(int));
                if(!z->base)
                {
                        printf("开辟失败!日!空间怎么怎么快就用完了!垃圾PC赶快丢了吧买新的!!!");
                        return 0;
                }
                z->top=z->base+shu;
                z->chang=shu+xin;
        }
        while(shu)
        {
                *(z->top)=shu%jin;
                z->top++;
                shu=shu/jin;
        }
        return 0;
}
int chuzhan(zhan *z)
{
        if(z->top==z->base)
        {
                printf("如果程序在运行就要产生下益了!!!还是让PC停止吧!!!O(∩_∩)O~");
                return 0;
        }
        while(z->top!=z->base)
        {
                if(*(--(z->top))<10)
                {
                        printf("%d",*(z->top));
                }
                else
                {
                        *(z->top)=*(z->top)-10+65;
                        printf("%c",*(z->top));
                }
        }
        printf("\n");
        free(z->base);
        return 0;
        }
void main()
{
int shu,jin;
zhan z;
printf("请输入你要转换的10进制数字");
scanf("%d",&shu);
printf("请输入你想转换的进制");
scanf("%d",&jin);
chushi(&z);
jinzhan(&z,shu,jin);
chuzhan(&z);
}
页: [1]
查看完整版本: 用栈写的任意进制转化有点问题!请大家看看啊!