编译没错误,为什么没有输出


#include <iostream>
#include <string>
using namespace std;
#define maxsize 100
struct sqStack{
  int *top;//栈顶
  int *base;//栈底
  int stacksize;
};
int InitStack(sqStack &S)
{
   S.base=new int[maxsize];
    if(S.base==NULL){
       return 0;
    }
    S.top=S.base;
    S.stacksize=maxsize;
}
bool isempty(sqStack &S)
{
    if(S.base==S.top)
        return true;
    else
        return false;
}
int length(sqStack &S)
{
    return S.top-S.base;
}
void push(sqStack &S,int e)
{
    if(S.top-S.base==S.stacksize)
        cout<<"数据溢出"<<endl;
    else{S.base=new int[maxsize];
        *S.top=e;
        S.top++;
    }
}
int pop(sqStack &S)
{
    while(S.base!=S.top){
        int e=*(S.top-1);
        S.top--;
        return e;
    }
}
void  convert(int number, int n)
{
    sqStack S;
    InitStack(S);
    int temp=0;
    while(number!=0){
     temp=number %n;
     number=(number-temp)/n ;
     push(S,temp);
     }
     int l;
     l=length(S);
     for(int i=0;i<l;i++)
    {
        int e=pop(S);
        cout<<e;
    }
    cout<<endl;
}
int main()
{
    convert(10,2);
}

img

问题还比较多,我先上结果

#include <iostream>
#include <string>
using namespace std;
#define maxsize 10
struct sqStack{
  int *top;//栈顶
  int *base;//栈底
  int stacksize;
};
sqStack InitStack()
{
    sqStack S;
    S.base=new int[maxsize];
    if(S.base==NULL){
       exit;
    }
    S.top=S.base;
    S.stacksize=maxsize;
    return S;
}
bool isempty(sqStack &S)
{
    if(S.base==S.top)
        return true;
    else
        return false;
}
int length(sqStack &S)
{
    return S.top-S.base;
}
void push(sqStack &S,int e)
{
    if(S.top-S.base==S.stacksize)
        cout<<"数据溢出"<<endl;
    else{
        *S.top=e;
        S.top++;
    }
}
int pop(sqStack S)
{
    int e;
    e=*(S.top-1);
    return e;
}
void  convert(int number, int n)
{
    sqStack S;
    S = InitStack();
    int temp=0;
    while(number!=0){
     temp=number %n;
     number=(number-temp)/n ;
     push(S,temp);
     }
     int l;
     l=length(S);
     for(int i=0;i<l;i++)
    {
        int e=pop(S);
        S.top--;
        cout<<e;
        cout<<'\n';
    }
    cout<<endl;
}
int main()
{
    convert(15,10);
}

由于我没有看懂你代码的意思,所以我改了一下,现在代码实现的功能是,你输入一个数13,输出1和3,也是用栈的操作

先说一下你的pop函数,是由逻辑问题的,你写了一个while(S.base!=S.top),这个意思就是直到top等于base就跳出循环,那其实你每次进这个pop函数return的只有最后一个值对不,所以你将第一个数据pop之后你可以在函数外让top--;这样就可以让top指针向后移动了

在一个就是你的push函数你在每次压栈的时候都分配了一块maxsize大小的空间,这里要知道,电脑在分配空间的时候,他每次分配的位置是不确定的,所以你每次分配完空间之后就开启了一个新的栈,但是你的s.top指向的还是你第一个栈的top所以,你最后的结果输出不出来,你把那句删了就行

你的这个sqstack &s;的方法我今天第一次见,不过试了一下还不错,学到了学到了,在你的initsqstack函数里我进行了改动,让他返回一个结构体,我也不知道你会不会这个就当作是个参考吧,如果不会可以私信我