主题:什么地方出错了?请高手指点!!
这个是一道由十进制向八进制转换的程序代码:
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
#define error
#define ok
#define true
#define false
#define stack_init_size 1000
#define stackincrement 100
typedef int status;
typedef struct{
int *base;
int *top;
int stacksize;
}Sqstack;
int initstack(Sqstack &S){
S.base=(int*)malloc(stack_init_size*sizeof(int));
if(!S.base) return 0;
S.top=S.base; //空栈
S.stacksize=stack_init_size;
return 1;
}
int stackempty(Sqstack S){
if(S.base==S.top)
return 1;
else
return 0;
}
int push(Sqstack &S,int e){ //插入新元素E作为新的栈顶元素
if(S.top-S.base>S.stacksize) {//栈满
S.base=(int*)realloc(S.base,(S.stacksize+stackincrement)*sizeof(int));
if(!S.base) return 0;//分配失败
S.top=S.base+S.stacksize;
S.stacksize+=stackincrement;
}
*S.top++=e;
return 1;
}
int pop(Sqstack &S,int &e){//若栈不空,则删除栈顶元素,并用E返回其值
if(S.top=S.base) return 0;
e=*--S.top;
return 1;
}
int conversion(){
int e,n;
Sqstack S;
initstack(S);
cout<<"输入一个十进制的数n:";
cin>>n;
while(n)
{
push(S,n%8);
n=n/8;
}
cout<<"输出这个十进制数对应的八进制数:";
while(!stackempty(S))
{
pop(S,e);
cout<<e;
}
return 0;
}
void main()
{
char a;
Sqstack S;
initstack(S);
cout<<conversion();
cin>>a;
}
如果以十进制的1348输入,那输出的就应该是八进制的2504,但是却输出一个很长的地址:-8589934600.
这到底是哪里错了拉??
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
#define error
#define ok
#define true
#define false
#define stack_init_size 1000
#define stackincrement 100
typedef int status;
typedef struct{
int *base;
int *top;
int stacksize;
}Sqstack;
int initstack(Sqstack &S){
S.base=(int*)malloc(stack_init_size*sizeof(int));
if(!S.base) return 0;
S.top=S.base; //空栈
S.stacksize=stack_init_size;
return 1;
}
int stackempty(Sqstack S){
if(S.base==S.top)
return 1;
else
return 0;
}
int push(Sqstack &S,int e){ //插入新元素E作为新的栈顶元素
if(S.top-S.base>S.stacksize) {//栈满
S.base=(int*)realloc(S.base,(S.stacksize+stackincrement)*sizeof(int));
if(!S.base) return 0;//分配失败
S.top=S.base+S.stacksize;
S.stacksize+=stackincrement;
}
*S.top++=e;
return 1;
}
int pop(Sqstack &S,int &e){//若栈不空,则删除栈顶元素,并用E返回其值
if(S.top=S.base) return 0;
e=*--S.top;
return 1;
}
int conversion(){
int e,n;
Sqstack S;
initstack(S);
cout<<"输入一个十进制的数n:";
cin>>n;
while(n)
{
push(S,n%8);
n=n/8;
}
cout<<"输出这个十进制数对应的八进制数:";
while(!stackempty(S))
{
pop(S,e);
cout<<e;
}
return 0;
}
void main()
{
char a;
Sqstack S;
initstack(S);
cout<<conversion();
cin>>a;
}
如果以十进制的1348输入,那输出的就应该是八进制的2504,但是却输出一个很长的地址:-8589934600.
这到底是哪里错了拉??