关于C语言中malloc函数的问题

lszlm2438 2010-12-24 11:15:10
我在写一个学生管理系统的时候用malloc开辟一个结构体大小的内存,结构体里面存的是学生信息,使用了链表,将最后一个链表的next指向了空,但在我写显示学生信息的函数时,用了一个while(p!=NULL),但是这个限制条件好像没起作用,还是进到循环体的内部了,具体代码如下*STU *tianjia(STU *head,int m)
{
STU *p = NULL,*ps = head;
p = (STU *)malloc(sizeof(STU));
int i;
if(p == NULL)
{
printf("没有开辟出足够的内存,请重新尝试");
exit(0);
}
if(head == NULL)
{
head = p;
}
else
{
while(ps->next!=NULL)
{
ps = ps->next;
}
ps->next = p;
}
ps = p;
printf("请输入数据\n");
printf("请输入学生学号");
scanf("%d",&p->number);
printf("请输入学生姓名");
scanf("%s",p->name);
printf("请输入学生各科成绩\n");
for(i=0;i<m;i++)
{
printf("请输入科目%d的成绩",i+1);
scanf("%d",&p->score[i]);
}
ps->next==NULL;
return head;
}这是写入的函数
void ShuChu(STU *head,int m)
{
STU *p=head;
if(head==NULL)
{
printf("对不起,此时无任何学生信息");
exit(0);
}
int i;
printf(" 学号 姓名");
for(i=0;i<m;i++)
{
printf(" 课程%d",i+1);
}
printf(" 总分 平均分\n");
printf(" %3d %s",p->number,p->name);
while(p!=NULL)
{
if(p==NULL)
{
printf("输出结束");
}
else
{
for(i=0;i<m;i++)
{
printf(" %3d",p->score[i]);
}
printf(" %4d %5f\n",p->sum,p->average);
p = p->next;
}
}
}
这是显示的函数

当输出时他有把写进去的内容输出出来,但是输完之后程序就被操作系统给安乐死了

请教高手!!!!!!!!!!急啊!!!!!!!!
...全文
159 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
我在地球 2010-12-24
  • 打赏
  • 举报
回复
while(ps->next!=NULL)
{
ps = ps->next;
}
ps->next = p;
}
ps = p;
printf("请输入数据\n");
printf("请输入学生学号");
scanf("%d",&p->number);
printf("请输入学生姓名");
scanf("%s",p->name);
printf("请输入学生各科成绩\n");
for(i=0;i<m;i++)
{
printf("请输入科目%d的成绩",i+1);
scanf("%d",&p->score[i]);
}
ps->next==NULL; // !!!!!! 被赋值 还是 判断 ???
return head;
}这是写入的函数

lszlm2438 2010-12-24
  • 打赏
  • 举报
回复
太感谢了!!!!!!!
zhutianjin4355255 2010-12-24
  • 打赏
  • 举报
回复
帮顶



老马何以识途 2010-12-24
  • 打赏
  • 举报
回复
你在输入的时候写的是
ps->next==NULL;
这是一个判断语句,不是赋值语句,所以实际上ps->next是个随机的值,并没有被赋予NULL。

补充一个问题,进循环体的条件是while(p!=NULL),那么里边的if(p==NULL)不可能执行到!

再补充一个问题,以后记得排版啊,看得真累!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧