当下面的代码执行完后,链表的内容就清空了???

gameyuanzhi 2006-03-14 07:17:08
当下面的代码执行完后,链表的内容就清空了???
student *checkID(student *stu)
{
int ID = 0;
student *p1=NULL;
student *p2=NULL;
printf("请输入要查询学生的学号(输0退出):");
scanf("%d",&ID);
getchar();
while(ID != 0)
{
if(stu==NULL)
{
system("cls");
printf("\n\n\t\t\t 没有任何学生资料!!!\n\n\n\n");
printf("请按回车键返回");
getchar();
return stu;
}

p1=stu; //循环查找ID相等的节点
while(ID != p1->m_ID && p1->next != NULL)
{
p2=p1;
p1=p1->next;
}
if(ID == p1->m_ID) //如果找到了就将这个节点打出来
{
printf("\t\t\t --------------------------------\n");
printf("\t\t\t 学号 姓名 C语言 C++ 英语\n");
printf("\t\t\t %4d%8s%7.1lf%7.1lf%7.1lf\n",p1->m_ID,p1->m_Name,p1->m_C,p1->m_Cpp,p1->m_Eng);
printf("\t\t\t --------------------------------\n\n");
}
else
{
printf("\n\n\t\t\t学号为%d的学生不存在!\n\n\n",ID);

}
printf("输入要查询的学生的学号:");
scanf("%d",&ID);
}
printf("\n\n\t\t 已经退出了学生成绩查询!\n\n\n");
return stu;
}

当我运行完这个函数时,链表的内容为什么就清空了,要如果才能不清空链表的数据!!!
是不是逻辑有什么问题啊??
望高手赐教!!!
...全文
268 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gameyuanzhi 2006-03-14
  • 打赏
  • 举报
回复
谢谢你帮忙!结贴喽!!
ykzhujiang 2006-03-14
  • 打赏
  • 举报
回复
呵呵,加油~写多了就熟练了
gameyuanzhi 2006-03-14
  • 打赏
  • 举报
回复
喔!my God~~~~~~~~~~~~~~!!!
我终于发现在问题在哪了!
天哪!
void menumain(student *stu)
{
student *stu=NULL;
while(1)
{
k=menu(k);
switch(k)
{
case 1:
stu=create(stu); //调用创建节点函数
break;
case 2:
system("cls");
stu=checkmenu(stu); //调用查询函数
break;
case 3:
change(stu); //调用修改函数
break;
case 4:
stu=del(stu);
break;
case 5:
system("cls");
showInfo(stu);
break;
case 6:
DataSave(stu);
break;
case 7:
stu = DataLoad(stu);
break;
case 0:
system("cls");
printf("\n\t\t\t 谢谢使用!\n\n\n");
exit(0);
default:
system("cls");
}
}
}
当每次退出的时候,这段代码就会把stu再初始化一次!郁闷!!搞了我两天的时间啊!
天啊!!!!!!!
谢谢楼上两位帮助!!!!
ykzhujiang 2006-03-14
  • 打赏
  • 举报
回复
完整代码贴一下,算法流程上面有些小的纰漏
gameyuanzhi 2006-03-14
  • 打赏
  • 举报
回复
第一次查询当然是存在的啊!!
在退出后就再进去查就什么都没有了!
ykzhujiang 2006-03-14
  • 打赏
  • 举报
回复
这里也没什么问题
student里面的数据你确定放进去了吗
第一次查询的时候是存在的吗?
du51 2006-03-14
  • 打赏
  • 举报
回复
student *checkID(student *stu)
不可能修改stu的.
你把代码都贴出耿.
gameyuanzhi 2006-03-14
  • 打赏
  • 举报
回复
//定义结构体指针变量
student *tmp=NULL;

tmp=(student *)malloc(sizeof(student));//分配内存空间

//将next设为空则表示为最后一个结点
tmp->next=NULL;

这个吗??
ykzhujiang 2006-03-14
  • 打赏
  • 举报
回复
你把生成stu所指向内容的代码贴一下
gameyuanzhi 2006-03-14
  • 打赏
  • 举报
回复
什么意思??
能说清楚点吗?
ykzhujiang 2006-03-14
  • 打赏
  • 举报
回复
这两段应该都没有问题

我大概知道你的问题所在了
你在生成stu的时候肯定使用了局部变量所以在函数调用结束的时候里面的内容就消失了
要用malloc或者new来在堆上分配空间
gameyuanzhi 2006-03-14
  • 打赏
  • 举报
回复
student *checkmenu(student *stu)
{
int nChoose;
while(nChoose != 0)
{
printf("\t\t\t 1.按学生学号查询\n");
printf("\t\t\t 2.按学生姓名查询\n");
printf("\t\t\t 3.按学生平均分查询\n");
printf("\t\t\t 0.返回\n\n");
printf("请选择(0~3):");
scanf("%d",&nChoose);//选择操作
switch(nChoose)
{
case 1:
stu=checkID(stu);
break;
case 2:
break;
case 3:
break;
case 0:
system("cls");
menumain();
default:
system("cls");
}
}
return stu;
}

我是在这个函数里调用的!
ykzhujiang 2006-03-14
  • 打赏
  • 举报
回复
应该不是这段的问题,希望楼主把其他相关的部分也贴一些

70,020

社区成员

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

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