运行程序是停止工作

qq_37035957 2016-12-26 05:33:47
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<string.h>
typedef struct pnode
{
char male[10];
char female[10];
int n;
struct pnode *fchild,*brother;
}
pnode,*ptree;
void creatfamily(ptree ,FILE );
void preorder(ptree p);
void show(ptree p);
int Menu()
{
system("color 1f");
system("mode con:cols=76 lines=35");
int i;
printf("****************** 欢迎使用普通家族管理系统*****************\n\n");
printf("请选择:\n");
printf(" \n");
printf(" 1.读取家庭关系\n");
printf(" \n");
printf(" 2.显示家庭关系\n");
printf(" \n");
printf(" 3.查找成员\n");
printf(" \n");
printf(" 4.添加新成员\n");
printf(" \n");
printf(" 5.修改成员\n");
printf(" \n");
printf(" 6.保存\n");
printf(" \n");
printf(" 7.退出系统\n\n\n");
printf(" \n");
printf("********************************************************************\n\n");
printf("输入1~6之间的数字选择相应功能:");
scanf("%d",&i);
return i;
}
ptree creatfamily(FILE *fp)
{
if(!feof(fp))
{
ptree p;
p=(ptree)malloc(sizeof(pnode));
char fname[10],mname[10];
int i;
fscanf(fp,"%s %s %d\n", fname,mname,&i);
if((strcmp(fname,"n")==0) && (strcmp(mname,"n")==0) && (i==0))
{
p=NULL;
return p;
}
else
{
strcpy(p->male,fname);
strcpy(p->female,mname);
p->n=i;
printf("读取成功\n");
p->fchild=creatfamily(fp);
p->brother=creatfamily(fp);
return p;
}
}
}

void PreOrder(ptree p)
{
if(p)
{
show(p);
PreOrder(p->fchild);
PreOrder(p->brother);
}
}
void show(ptree p)
{
printf("名字 配偶 第几代\n");
printf("%2s %6s %d\n",p->male,p->female,p->n);
}
void search(ptree p,char name[])
{
if(p)
{
if(strcmp(p->male,name)==0)
{
show(p);
getchar();
getchar();
}
search(p->fchild,name);
search(p->brother,name);
}
}
void add(ptree p,char name[])
{
char fname[10],mname[10];
int i;
if(p)
{
if(strcmp(p->male,name)==0)
{
printf("名字 配偶 第几代\n");
scanf("%s %s %d",fname,mname,&i);
p->fchild=(ptree)malloc(sizeof(pnode));
strcpy(p->fchild->male,fname);
strcpy(p->fchild->female,mname);
p->fchild->n=i;
p->fchild->fchild=NULL;
p->fchild->brother=NULL;
}
add(p->fchild,name);
add(p->brother,name);
}
}
void gai(ptree p,char name[])
{
char fname[10],mname[10];
int i;
if(p)
{
if(strcmp(p->male,name)==0)
{
printf("名字 配偶 第几代\n");
scanf("%s %s %d",fname,mname,&i);
strcpy(p->male,fname);
strcpy(p->female,mname);
p->n=i;
}
gai(p->fchild,name);
gai(p->brother,name);
}
}
void save(ptree p,FILE *stream)
{
if(p)
{
fprintf(stream,"%s %s %d",p->male,p->female,p->n);
save(p->fchild,stream);
save(p->brother,stream);
}
else
{
char out[20] = "n n 0";
fprintf(stream,"%s\n",out);
}
}
int main()
{
int status;
char name[10];
ptree p;
FILE *fp= fopen("lmx.txt","r+");
while(1)
{
status=Menu();
switch(status)
{
case 1:
p=creatfamily(fp);
getchar();
getchar();
break;
case 2:
PreOrder(p);
getchar();
getchar();
break;
case 3:
printf("请输入搜索的名字\n");
scanf("%s",name);
search(p,name);
break;
case 4:
printf("请输入要孩子的人\n");
scanf("%s",name);
add(p,name);
break;
case 5:
printf("请输入要修该的人\n");
scanf("%s",name);
gai(p,name);
break;
case 6:
save(p,fp);
getchar();
getchar();
break;
case 7:
printf("\n感谢使用本系统\n");
fclose(fp);
fclose(fp);
exit(0); //如果选择5,则退出循环终止程序
break;
default :
printf("\n您选择有误\n");
getchar();
}
}
return 0;
}
...全文
208 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-12-27
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
paschen 2016-12-26
  • 打赏
  • 举报
回复
FILE *fp= fopen("lmx.txt","r+"); 之后检查文件有没打开成功,若没成功就不要再往下执行,否则你在feof(fp)出错
qq_37035957 2016-12-26
  • 打赏
  • 举报
回复
该程序运行后会停止工作,求大神看看

69,373

社区成员

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

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