请高手指教为什么以下程序不能实现十进制数转八进制数
原代码如下:
#include "stdio.h"
#include "stdlib.h"
#define STACK_INIT_SIZE 100
/*存储空间初始分配量*/
#define STACKINCREMENT 10
/*存储空间分配增量*/
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int Status;
typedef int SElemType;
typedef struct{
SElemType *base; /*在栈构造之前和销毁之后,base的值为NULL*/
SElemType *top; /*栈顶指针*/
int stacksize; /*当前已分配的存储空间,以元素为单位*/
}SqStack;
Status InitStack(SqStack S){
/*构造一个空栈S*/
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)exit(OVERFLOW); /*存储分配失败*/
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status Push(SqStack S,SElemType e){
/*插入元素e为新的栈顶元素*/
if(S.top-S.base>=S.stacksize){ /*栈满,追加存储空间*/
S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)exit(OVERFLOW); /*存储分配失败*/
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
Status Pop(SqStack S,SElemType *e){
/*若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR*/
if(S.top==S.base)return ERROR;
e=--S.top;
return OK;
}
Status StackEmpty(SqStack S){
/*若栈S是空栈,则返回TRUE,否则返回FALSE*/
if(S.top==S.base)return OK;
return ERROR;
}
void conversion(){
/*对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数*/
SqStack S;
int *e,N;
InitStack(S);
scanf("%d",&N);
while(N){
Push(S,N%8);
N=N/8;
}
while(!StackEmpty(S)){
Pop(S,e);
printf("%d",*e);
}
}
void main(){
conversion();
getch(); /*使用WinTC编译后的运行结果不马上关闭*/
}