告诉我这个代码为什么死循环了?

一个数制转换器,我是一个初学者,希望各位大神指点。#include <stdio.h>#include <stdlib.h>#define STACK_INIT_SIZE 100#define STACKINICREMENT 10#define ERROR -1#define OVERFLOW -2#define OK 1typedef int status;typedef struct { int *base; int *top; int stacksize; }Sqstack;status Initstack(Sqstack &S){ S.base=(int *)malloc(STACK_INIT_SIZE *sizeof(int)); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK;}status Push(Sqstack &S,int e){ if(S.top-S.base>=S.stacksize){ S.base=(int *)realloc(S.base,(S.stacksize+STACKINICREMENT)*sizeof (int)); if(!S.base)exit (OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINICREMENT;} *S.top++=e; return OK;}status Pop(Sqstack &S,int &e){ if (S.top==S.base)return 0; e=*(--S.top); return OK;}status Stackempty(Sqstack S){ if(S.top == S.base) return true; else return false;}int main(){ Sqstack S; int n; int e; int m; status Initstack(Sqstack &S); printf("请输入你所要转换的十进制数:"); scanf("%d",&n); printf("你所选择的进制(1到10之间):"); scanf("%d",&m); printf("%d,%d",n,m); while(n!=0){ e=n%m; Push(S,e); n=n/m; } printf("你所得到的该进制数:"); while (!Stackempty(S)){ Pop (S,e); printf("%d",e); } }好吧,现在已经解决了,那就问一下C语言语句与C++语句的区别吧有能把它改写为纯C语言语句的大神吗?
2026年09月24日 11:19
有2个网友回答
网友(1):

已经改好了,只要把函数中C++中的引用改成C语言中的指针就可以了!初学者能看懂这段代码不错了,还有数据结构中的栈呢,(代码的逻辑结构没有改动)你试试

#include 
#include 
#define STACK_INIT_SIZE 100
#define STACKINICREMENT 10
#define ERROR -1
#define OVERFLOW -2
#define OK 1
typedef int status;
typedef struct {
    int *base;
    int *top;
    int stacksize;
}Sqstack;
status Initstack(Sqstack *S){
    (*S).base=(int *)malloc(STACK_INIT_SIZE *sizeof(int));
    if(!(*S).base)exit(OVERFLOW);
    (*S).top=(*S).base;
    (*S).stacksize=STACK_INIT_SIZE;
    return OK;}
status   Push(Sqstack *S,int e){
    if((*S).top-(*S).base>=(*S).stacksize){
        (*S).base=(int *)realloc((*S).base,((*S).stacksize+STACKINICREMENT)*sizeof (int));
        if(!(*S).base)exit (OVERFLOW);
        (*S).top=(*S).base+(*S).stacksize;
        (*S).stacksize+=STACKINICREMENT;}
    *(*S).top++=e;
    return OK;
}
status  Pop(Sqstack *S,int &e){
    if ((*S).top==(*S).base)return 0;
    e=*(--(*S).top);
    return OK;}
status  Stackempty(Sqstack S){
    if(S.top == S.base)
        return true;
    else
        return false;}
int main(){
    Sqstack S;
    int n;
    int e;
    int m;
    Initstack(&S);
    printf("请输入你所要转换的十进制数:");
    scanf("%d",&n);
    printf("你所选择的进制(1到10之间):");
    scanf("%d",&m);
    printf("%d,%d",n,m);
    while(n!=0){
        e=n%m;
        Push(&S,e);
        n=n/m;
    }
    printf("你所得到的该进制数:");
    while (!Stackempty(S)){
        Pop (&S,e);
        printf("%d",e);
 }
 printf("\n");//这句加上结果会看清楚点
return 0;
}

网友(2):

你现在这代码就是C语言