这个程序哪里错?

#defineSTACK_INIT_SIZE100#defineSTACKINCREMENT10#include<stdio.h>typedefstruct{int*ba... #define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#include <stdio.h>

typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;

SqStack *S;

void InitStack(SqStack *S)
{
S->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!S->base)
exit(0);
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
}

void Push(SqStack *S,int e)
{
if((S->top-S->base)>=(S->stacksize))
{
S->base=(int
*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(int));
if(!S->base)
exit(0);
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
* S->top++=e;
}

int Pop(SqStack *S)
{
int e;
if(S->top==S->base)
return 0;
e=* --S->top;
return e;
}
int StackEmpty(SqStack *S)
{
if((S->top)==(S->base))
return 1;
else
return 0;
}
void conversion()
{
int N,e;
InitStack(S);
printf("please input:");
scanf("%d",&N);
while(N)
{
Push(S,N%8);
N/=8;
}
printf("the number is:\n");
while(!StackEmpty(S))
{
e=Pop(S);
printf("%d",e);
}
printf("\n");
}

void main()
{
conversion();

}
最后答案可以输出,但是在正确答案后面总有一个NULL pointer assigment
这是什么意思?谢谢啦!!!
展开
 我来答
百度网友fbd573469
2007-06-11 · TA获得超过636个赞
知道小有建树答主
回答量:244
采纳率:0%
帮助的人:0
展开全部
你这里是一个10-8进制转换程序
这是你的程序: 
#define STACK_INIT_SIZE 100 
#define STACKINCREMENT 10 
#include <stdio.h> 

typedef struct 

    int *base; 
    int *top; 
    int stacksize; 
}SqStack; 

SqStack *S;  /* 1. 问题在此,你只是申明了一个指针变量, */ 
     /* 不是结构体变量,没有结构体变量分配空间 */ 

void InitStack(SqStack *S) 

    S->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));  
 /* 在这里却直接向指针所指向的结构体的base域存放数据,所以有问题  */ 
    if(!S->base) 
        exit(0); 
    S->top=S->base; 
    S->stacksize=STACK_INIT_SIZE; 


void Push(SqStack *S,int e) 

    if((S->top-S->base)>=(S->stacksize)) 
    { 
        S->base=(int *) 
        realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(int)); 
        if(!S->base) 
            exit(0); 
        S->top=S->base+S->stacksize; 
        S->stacksize+=STACKINCREMENT; 
    } 
    * S->top++=e; 


int Pop(SqStack *S) 

    int e; 
    if(S->top==S->base) 
    return 0; 
    e=* --S->top; 
    return e; 

int StackEmpty(SqStack *S) 

    if((S->top)==(S->base)) 
        return 1; 
    else 
        return 0; 


void conversion() 

    int N,e; 
    InitStack(S); 
    printf("please input:"); 
    scanf("%d",&N); 
    while(N) 
    { 
        Push(S,N%8); 
        N/=8; 
    } 
    printf("the number is:\n"); 
    while(!StackEmpty(S)) 
    { 
        e=Pop(S); 
        printf("%d",e); 
    } 
    printf("\n"); 


void main() 
{ /* 2. 
    conversion(); 



解决方法可以象下面这样做:
1. 在1.处 修改成 
SqStack *S,head; 
2. 在2.处添加
    S = & head;
 
解然谭莺
2019-02-06 · TA获得超过3744个赞
知道大有可为答主
回答量:3069
采纳率:34%
帮助的人:233万
展开全部
1.BUG实在太多,没法一一标注,对照着看吧
2.从代码上看,指针操作非常混乱!希望写程序是头脑清醒,知道各个指针的指向
3.建议使用DEBUG工具,程序都是一步步调出来的。
仅供参考:
#include<stdio.h>#include<malloc.h>
structstu{
intnum;
charname[16];
charsex;
intage;
floatgrade;
structstu*next;}a[5]={{101,"zhang",'m',19,95.5},{102,"wang",'f',18,92.0},{103,"zhao",'f',19,85.5},
{104,"li",'m',20,96.0},{105,"gao",'f',17,91.0}};
structstu*createlist()//建立链表{
stu*head,*p1;
inti;
head=(stu*)malloc(sizeof(stu));
head->next=NULL;
if(head!=NULL)
{
stu*end=head;
for(i=0;i<5;i
)
{
p1=(stu*)malloc(sizeof(stu));
*p1=a[i];
p1->next=end->next;
end->next=p1;
end=p1;
}
}
else
printf("outofspace");
returnhead;}
intdeletenode(stu*head,intage)//删除年龄为age的结点{
stu*t,*p;
p=head;
t=head->next;
while(t!=NULL
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
硕觉务秋灵
2020-06-25 · TA获得超过3763个赞
知道大有可为答主
回答量:3193
采纳率:26%
帮助的人:193万
展开全部
包含头的文件没加扩展明.h
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
麴日俞初翠
2020-05-20 · TA获得超过4318个赞
知道大有可为答主
回答量:3217
采纳率:35%
帮助的人:215万
展开全部
for(i=0;i<year;i++)
{

if(s.Compare(i)==1)

{

for(j=1;j<=12;j++)
//整年的所有天数

{

sum=sum+a[0][j];
//是闰年

}

}

else

{

for(j=1;j<=12;j++)

{

sum=sum+a[1][j];
//不是闰年

}

}
}

if(s.Compare(i)==1)

{

for(j=1;j<month;j++)

{

sum=sum+a[0][j];
//是闰年

}

}

else

{

for(j=1;j<month;j++)

{

sum=sum+a[1][j];
//不是闰年

}

}
sum=sum+day;
先求整年的所有天数,再求月份的天数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式