求助,用c语言把十进制转换成二进制的程序中的错误不知道该如何修改啊,
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100 /*存储空间初始分配量*/
#define STACKINCRRMENT 10 /*存储空间增量*/
#define ok 1
#define error 0
#define Status int
typedef struct
{
int *base; /*栈尾指针*/
int *top; /*栈头指针*/
int stacksize; /*当前以分配的存储空间*/
}spstack;
Status Initstack(spstack *s)
{ /*构造一个空栈s*/
s->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s->base)
exit(1); /*存储分配失败*/
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return ok;
}
int Pop(spstack *s)
{ /*若栈不空,删除栈顶元素,并用e返回其值*/
int e;
if(s->top==s->base)
return error;
e=*(--s->top);
return e;
}
Status push(spstack *s,int e)
{ /*插入元素e为新的栈顶元素*/
if(s->top-s->base>=s->stacksize) /*栈满,追加存储空间*/
{
s->base=(int*)realloc(s->base,(s->stacksize+STACKINCRRMENT)*sizeof(int));
if(!s->base)
exit(1);
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCRRMENT;
}
*s->top++=e;
return ok;
}
void conversion(int p,int n,spstack *s)
{ /* 输入任意的十进制数转换成想换成的进制数*/
int m;
Initstack(s);
while(p)
{
push(s,p%n);
p=p/n;
}
while(s->base!=s->top)
{
m=pop(s);
printf("%d",m);
}
}
void main()
{
int p,n;
spstack s;
printf("输入要转换成?进制:\n");
scanf("%d\n",&n);
printf("输入要转换的进制数:\n");
scanf("%d\n",&p);
conversion(p,n,&s);
}
[解决办法]
if(s->top-s->base>=s->stacksize) 应该是==
[解决办法]
- C/C++ code
#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 100 /*存储空间初始分配量*/#define STACKINCRRMENT 10 /*存储空间增量*/#define ok 1#define error 0#define Status inttypedef struct{ int *base; /*栈尾指针*/ int *top; /*栈头指针*/ int stacksize; /*当前以分配的存储空间*/} spstack;Status Initstack(spstack *s){ /*构造一个空栈s*/ s->base = (int *)malloc(STACK_INIT_SIZE*sizeof(int)); if (!s->base) exit(1); /*存储分配失败*/ s->top = s->base; s->stacksize = STACK_INIT_SIZE; return ok;}int Pop(spstack *s){ /*若栈不空,删除栈顶元素,并用e返回其值*/ int e; if(s->top==s->base) return error; e=*(--s->top); return e;}Status push(spstack *s, int e){ /*插入元素e为新的栈顶元素*/ if(s->top-s->base >= s->stacksize) /*栈满,追加存储空间*/ { s->base = (int*)realloc(s->base, (s->stacksize+STACKINCRRMENT)*sizeof(int)); if (!s->base) exit(1); s->top = s->base + s->stacksize; s->stacksize += STACKINCRRMENT; } *s->top++=e; return ok;}void conversion(int p, int n, spstack *s){ /* 输入任意的十进制数转换成想换成的进制数*/ int m; Initstack(s); do { push(s, p%n); p = p / n; } while (p); while (s->base != s->top) { m = Pop(s); if (m < 10) printf("%d", m); else printf("%X", m); }}int main(){ int p, n; spstack s; printf("输入要转换成?进制:\n"); scanf("%d", &n); getchar(); printf("输入要转换的进制数:\n"); scanf("%d", &p); conversion(p, n, &s); return 0;}