题目是:用C语言利用堆栈编写输入一个十进制数输出是八进制数虽然没错但是个死循环求改错!!!程序如下''

来源:百度知道 编辑:UC知道 时间:2024/05/27 06:14:38
#define size 10
typedef struct node
{
int data[size];
int top;
}listnode;
listnode * creatstrack()
{
listnode *s;
s=(listnode *)malloc(sizeof(listnode));
s->top=-1;
return s;
}
void push(listnode *s,int x)
{
if(s->top==size-1)
printf("error0");
else
{
s->top++;
s->data[s->top]=x;
}
}
int pop(listnode *s)
{
int x;
if(s->top==-1)
printf("error1");
else
{
x=s->data[s->top];
s->top--;
return x;
}
}
main()
{
listnode *q;
int num,i,n;
q=creatstrack();
scanf("%d",&num);
do
{
n=num%8;
push(q,n);
}
while(n!=0);
while(q->top!=-1)
printf("%d",pop(q));
}

注意一下你的这里:
do
{
n=num%8;
push(q,n);
}
其中num的只是总是保持不变的,所以会产生死循环

这里可以在外面加一个变量
int k;
k=1;
do{
k=k*10;
n=num%8;
num=num-(k/10)*8;
push(q,n);
}
这样就可以了,不知还有没有其他没考虑到的地方。