首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

在弄进制转换的时候,主函数不加printf就崩溃是咋回事

2013-12-22 
在弄进制转换的时候,主函数不加printf就崩溃是怎么回事#includestdio.h#include stdlib.h#define STAC

在弄进制转换的时候,主函数不加printf就崩溃是怎么回事
#include<stdio.h>
#include <stdlib.h>
  
#define STACK_INIT_SIZE 100    //存储空间初始分配量   
#define STACKINCREMENT 10      //存储空间分配增量   

typedef struct none
{   int *top;
    int *base;
int stacksize;
}stack;

void conv(int N,int i);
void CreatStack(stack &s);
void push(stack &s,int e);

void CreatStack(stack &s)//构造一个空栈
{
s.base=(int*)malloc(sizeof(int));
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
}

void push(stack &s,int e)//入栈
{
if(s.top-s.base>=s.stacksize)
{
s.base=(int*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
}

void pop(stack &s,int &e){   
    if(s.top==s.base)  //判断栈是否为空,用e返回出栈的值   
      printf("11");
    else e = *--s.top;    
  
}  

void conv(int N,int i)
{
stack s;
int e;
CreatStack(s);
while(N)
{
push(s,N%i);
N=N/i;
}
while(s.top!=s.base)
{
pop(s,e);
printf("%d",e);
}
}

void main()
{
int N;
    scanf("%d",&N);  
    printf("\n");  
    conv(N,2);  //进制转换
}

就是主函数那里,如果去掉printf就崩溃了,把printf放到其他地方也是崩溃,而在printf里随便打什么都可以,但是不打就不行,这printf有什么关系= =
[解决办法]
调试一下指针和栈。

引用:
#include<stdio.h>
#include <stdlib.h>
  
#define STACK_INIT_SIZE 100    //存储空间初始分配量   
#define STACKINCREMENT 10      //存储空间分配增量   

typedef struct none
{   int *top;
    int *base;
int stacksize;
}stack;

void conv(int N,int i);
void CreatStack(stack &s);
void push(stack &s,int e);

void CreatStack(stack &s)//构造一个空栈
{
s.base=(int*)malloc(sizeof(int));
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
}

void push(stack &s,int e)//入栈
{
if(s.top-s.base>=s.stacksize)
{
s.base=(int*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
}

void pop(stack &s,int &e){   
    if(s.top==s.base)  //判断栈是否为空,用e返回出栈的值   
      printf("11");
    else e = *--s.top;    
  
}  

void conv(int N,int i)
{
stack s;
int e;
CreatStack(s);
while(N)
{
push(s,N%i);
N=N/i;
}
while(s.top!=s.base)
{
pop(s,e);
printf("%d",e);
}
}

void main()
{
int N;
    scanf("%d",&N);  
    printf("\n");  
    conv(N,2);  //进制转换
}

就是主函数那里,如果去掉printf就崩溃了,把printf放到其他地方也是崩溃,而在printf里随便打什么都可以,但是不打就不行,这printf有什么关系= =

热点排行