c-求助大神,在2进制转8进制时,栈出现溢出的现象,怎么回事?

问题描述

求助大神,在2进制转8进制时,栈出现溢出的现象,怎么回事?

求助大神,在2进制转8进制时,栈出现溢出的现象,怎么回事?
#include
#include
#include
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
struct SqStack{
int base;
int *top;
int stacksize;
};
int InitStack ( struct SqStack *s){
int *newbase;
newbase= (int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!newbase)
return 0;
s->base=newbase;
s->top = s->base ;
s->stacksize = STACK_INIT_SIZE ;
return 1;
}//构建一个栈
int GetTop(SqStack *s,int e){
if(s->top==s->base)
return 0;
e=
(s->top-1);
return 1;
}//若栈不空,则用e返回当前的栈顶元素
int push(SqStack s,int e){
if(s->top-s->base>=s->stacksize){
s->base = (int *)realloc(s->base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(int));
if(!s->base)
return 0;
s->top=s->base+s->stacksize;
s->stacksize = s->stacksize +STACKINCREMENT;
}
*s->top++=e;
return 1;
} //插入元素e为新的栈顶元素
int pop(SqStack *s,int &e){
if(s->top==s->base)
return 0;
e=
--s->top;
return 1;
}//删除S的栈顶元素
int StackEmpty(SqStack s){
if(s.base==s.top)
return 1;
else
return 0;
}//判断该栈是否为空
void ClearStack(struct SqStack &s){
if(!StackEmpty(s))
s.top=s.base;
}

//清空一个栈
int changeNumber(struct SqStack &s,int n,int prem,int nowm){
int i=0,sum=0,pop=0;
switch(prem)
{
case 2:{
switch(nowm)
{
case 2:return n;break;
case 8:
{ n=changeNumber(s,n,prem,10);
printf("the stack is nulln%d",prem);
changeNumber(s,n,10,nowm);
}break;
case 10:

while(n!=0)
{
pop=(int)((n%10)*pow(2,i));
push(&s,pop);
n=n/10;
i++;
if(!StackEmpty(s))
GetTop(&s,pop);
sum+=pop;
}break;
return sum;
case 16:break;
}
}break;
case 8:{
switch(nowm)
{
case 2:push(&s,n);break;
case 8:push(&s,n);break;
case 10:
while(n!=0)
{

push(&s,int(n*pow(2,i)));
n=n%10;
i++;
}break;
case 16:
while(n!=0)
{

n=n%10;
push(&s,int(n*pow(8,i)));
i++;
}break;
}
}break;
case 10:{
switch(nowm)
{

case 2:
while(n!=0)
{
push(&s,n%2);
n=n/2;
}break;
case 8:
{
while(n!=0)
{
push(&s,n%8);
n=n/8;
}
sum=changeNumber(s,n,prem,nowm);
printf("%d",sum);
}break;
case 10:push(&s,n);break;
case 16:
while(n!=0)
{
push(&s,n%16);
n=n/16;
}break;
}
}break;
case 16:;break;
}
return 0;
}
void main(){
struct SqStack s ;
int e,n,prem,nowm,sum;
InitStack(&s);
printf("请输入任意一进制的一个数:");
scanf("%d",&n);
printf("请输入该数的进制数:");
scanf("%d",&prem);
printf("请输入要转换成的进制:");
scanf("%d",&nowm);
if(prem!=10){
sum=changeNumber(s,n,prem,nowm);
printf("%d",sum);
}
else
{
changeNumber(s,n,prem,nowm);
while(!StackEmpty(s))
{
pop(&s,e);
switch(e)
{

        case 10:printf("%c",'A');break;
        case 11:printf("%c",'B');break;
        case 12:printf("%c",'C');break;
        case 13:printf("%c",'D');break;
        case 14:printf("%c",'E');break;
        case 15:printf("%c",'F');break;
        default :printf("%dn",e);
        }
    }
}

}

解决方案

这种问题,建议你单步调试、分析你自己定义的栈溢出的原因。
你帖出来的代码,格式比较乱,难以分析。

解决方案二:

好的,谢谢,调试的功夫不太过关,只能看到是栈溢出了,我再理理吧

解决方案三:

这个建议一步步调试,可能是循环的问题,也可能是指针的问题。

时间: 2024-09-16 19:24:43

c-求助大神,在2进制转8进制时,栈出现溢出的现象,怎么回事?的相关文章

求助大神进来看下ios程序运行报错如何解决

问题描述 求助大神进来看下ios程序运行报错如何解决 解决方案 自己研究研究找找百度 解决方案二: [subDict objectForKey: removeObjectForKey:key]; 看不懂,哪有这个方法啊.

combox-C#或者DEV控件高手进,求助大神!呀,gridview中动态添加COMBOX后出现问题

问题描述 C#或者DEV控件高手进,求助大神!呀,gridview中动态添加COMBOX后出现问题 步骤1:我定义一个全局的COMBOX控件变量: 步骤1:我为GRIDVIEW动态添加了一列,将这一列设置我步骤1中的COMBOX: 步骤2:我为这个COMBOX添加click事件,在事件中我读取GRIDVIEW中的focusROW,读取某一列,判断该列的值来动态为COMBOX添加ITEM; 问题:在click事件中,每次都能正确的获取focusROW,也能为combox添加ITEM,但是就是COM

c#-C#做上位机时自定义了一个控件,控件对↑键做出反应,发现方向键不好使,按键事件进不去,求助大神!

问题描述 C#做上位机时自定义了一个控件,控件对↑键做出反应,发现方向键不好使,按键事件进不去,求助大神! 控件主要是想做一个显示速度的条,当按↑时格子文本框变色 using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System

有没有会使用易康软件分类的大神?求助大神帮助。

问题描述 有没有会使用易康软件分类的大神?求助大神帮助. 就是简单的图像分类,分成两类就可!求具体的操作步骤,求好心人帮助! 解决方案 http://download.csdn.net/download/lpfskmjh/9420655 解决方案二: SmartUpload的使用(有个小问题,大神请进~)

django-Django-cas 单点登录求助大神

问题描述 Django-cas 单点登录求助大神 报错信息:[Errno socket error] [Errno 1] _ssl.c:504: error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error Django Setting文件里面已经安装配置配置了,附上setting部分代码: INSTALLED_APPS = ( 'django.contrib.admin' 'django.contri

算法-求助大神:c语言求最长公共子序列问题

问题描述 求助大神:c语言求最长公共子序列问题 我写的这个能正确求出最长序列元素个数但是输出的最长序列却是乱码,求大神指教.代码如下: #include #include #include #define MAX 101 int Long(char a[],char b[],char result[] ) { int m,n; m=strlen(a); n=strlen(b); int str[MAX][MAX]; int i,j,sum; for(i=0;i<=m;i++) { str[i][

求助大神!!!!windows下的udp协议封装,实现网络通信

问题描述 求助大神!!!!windows下的udp协议封装,实现网络通信 在Qt平台上写的一个程序,是基于udp协议的网络通信,通过在一台电脑上打开两个命令窗口可以实现通信,为什么在两台电脑上就不行了?两台电脑连在同一个路由器下,已经关了防火墙!纠结了2天的问题了,求大神解决!!!!! 解决方案 先ping下看看通不通,本机的防火墙和路由的防火墙是否都关了.路由的防火墙是否禁用了广播.端口号,ip是否正确.程序先在本地双开能运行么?

求助大神,这个matlab程序如何修改才能正确运行?

问题描述 求助大神,这个matlab程序如何修改才能正确运行? function [Zp,Y1p,Y2p,Y3p,Xp,LC1,LC2]=JSPGA(M,N,Pm,T,P) %-------------------------------------------------------------------------- %??JSPGA.m %??流水线型车间作业调度遗传算法 %??GreenSim团队原创作品,转载请注明 %??Email:greensim@163.com %??Green

mfc-MFC编程遇到问题求助大神

问题描述 MFC编程遇到问题求助大神 求助各路大神.. 我在VC 6.0上编写MFC程序,我在一个dlg对话框里面加两个按钮控件,设置点击它们会弹出不同的模态对话框(用的dlg.DoModal()).新的对话框有自己的编辑框和按钮,我在编辑框输入数据后点击按钮后会在结果编辑框中输出数据,但是我发现一个问题. 我这里想要做的是,点击两个按钮分别弹出一个模逆运算和模幂运算的对话框,我先写模逆的,编译运行,点击按钮,弹出对话框,在编辑框输入数据(运算数和模数),点击按钮,输出数据,结果没问题.接着我写