我建立了链表。需要查询其中某项数据,但运行有问题,代码如下,请各位大虾指教下

praguepp 2008-10-31 08:27:34
#include "testengineer head.h"
#include "testengineer var.h"
struct EngineerStruct *SearchEngineerInformation(struct EngineerStruct *Head)
{
unsigned int choose;
unsigned int no;
struct EngineerStruct *cur=NULL;
struct EngineerStruct *p=NULL;
enum BOOL{False,True};
enum BOOL find=False;

printf("\t 请选择查询的方式:1.编号 2.姓名\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
printf("\t 请输入要查询的编号:\n");
scanf("%d",&no);
if(Head=NULL)
{
printf("数据库为空!");
return NULL;
}

cur=Head;

if(no==cur->EngineerNo)
{

printf("┌──┬──┬──┬──┬──┬──┬──┬──┐\n");
printf("│编号│%04d│性别│ %c │学历│ %d │工龄│ %d │\n", p->EngineerNo,p->sex,p->educa,p->EngineerWorkYears);
printf("├──┼──┴──┴──┴──┴──┴──┴──┤\n");
printf("│姓名│%-s │\n",p->EngineerName);
printf("├──┼────────┬──┬────────┤\n");
printf("│生日│ %d-%d-%d │电话│%-s │\n",p->EngineerBirth.year ,p->EngineerBirth.month,p->EngineerBirth.day,p->EngineerPhone);
printf("├──┼────────┴──┴────────┤\n");
printf("│籍贯│%-s │\n",p->EngineerHometown);
printf("├──┼────────────────────┤\n");
printf("│地址│ %-s │\n",p->EngineerAddress);
printf("└──┴────────────────────┘\n");
system("pause");
}

else
{
while(no!=cur->EngineerNo && cur->Next!=NULL)
{
p=cur;
cur=cur->Next;
if(no==cur->EngineerNo)
{
printf("┌──┬──┬──┬──┬──┬──┬──┬──┐\n");
printf("│编号│%04d│性别│ %c │学历│ %d │工龄│ %d │\n", p->EngineerNo,p->sex,p->educa,p->EngineerWorkYears);
printf("├──┼──┴──┴──┴──┴──┴──┴──┤\n");
printf("│姓名│%-s │\n",p->EngineerName);
printf("├──┼────────┬──┬────────┤\n");
printf("│生日│ %d-%d-%d │电话│%-s │\n",p->EngineerBirth.year ,p->EngineerBirth.month,p->EngineerBirth.day,p->EngineerPhone);
printf("├──┼────────┴──┴────────┤\n");
printf("│籍贯│%-s │\n",p->EngineerHometown);
printf("├──┼────────────────────┤\n");
printf("│地址│ %-s │\n",p->EngineerAddress);
printf("└──┴────────────────────┘\n");
find=True;
break;
}
}
}
if(!find)
printf("数据不存在!");
break;
case 2:
printf("请输入要搜索的姓名:");
break;

}

return Head;
}
...全文
84 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
praguepp 2008-10-31
  • 打赏
  • 举报
回复
晕……,我真粗心。
谢谢大家帮忙。
wyswyg63 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yangkunhenry 的回复:]
别的没看……
if(Head==NULL)
[/Quote]
晕,这么明显的问题啊,楼主干啥子去了
lsmgeb89 2008-10-31
  • 打赏
  • 举报
回复
又看了一下,2楼说的很正确,你应该改掉。
yangkunhenry 2008-10-31
  • 打赏
  • 举报
回复
别的没看……
if(Head==NULL)
praguepp 2008-10-31
  • 打赏
  • 举报
回复
//很抱歉没有说明,程序到这里就出错退出了
#include "testengineer head.h"
#include "testengineer var.h"
struct EngineerStruct *SearchEngineerInformation(struct EngineerStruct *Head)
{
unsigned int choose;
unsigned int no;
struct EngineerStruct *cur=NULL;
struct EngineerStruct *p=NULL;
enum BOOL{False,True};
enum BOOL find=False;

printf("\t 请选择查询的方式:1.编号 2.姓名\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
printf("\t 请输入要查询的编号:\n");
scanf("%d",&no);
if(Head=NULL)//HERE!
{
printf("数据库为空!");
return NULL;
}

cur=Head;

if(no==cur->EngineerNo)
{

printf("┌──┬──┬──┬──┬──┬──┬──┬──┐\n");
printf("│编号│%04d│性别│ %c │学历│ %d │工龄│ %d │\n", p->EngineerNo,p->sex,p->educa,p->EngineerWorkYears);
printf("├──┼──┴──┴──┴──┴──┴──┴──┤\n");
printf("│姓名│%-s │\n",p->EngineerName);
printf("├──┼────────┬──┬────────┤\n");
printf("│生日│ %d-%d-%d │电话│%-s │\n",p->EngineerBirth.year ,p->EngineerBirth.month,p->EngineerBirth.day,p->EngineerPhone);
printf("├──┼────────┴──┴────────┤\n");
printf("│籍贯│%-s │\n",p->EngineerHometown);
printf("├──┼────────────────────┤\n");
printf("│地址│ %-s │\n",p->EngineerAddress);
printf("└──┴────────────────────┘\n");
system("pause");
}

else
{
while(no!=cur->EngineerNo && cur->Next!=NULL)
{
p=cur;
cur=cur->Next;
if(no==cur->EngineerNo)
{
printf("┌──┬──┬──┬──┬──┬──┬──┬──┐\n");
printf("│编号│%04d│性别│ %c │学历│ %d │工龄│ %d │\n", p->EngineerNo,p->sex,p->educa,p->EngineerWorkYears);
printf("├──┼──┴──┴──┴──┴──┴──┴──┤\n");
printf("│姓名│%-s │\n",p->EngineerName);
printf("├──┼────────┬──┬────────┤\n");
printf("│生日│ %d-%d-%d │电话│%-s │\n",p->EngineerBirth.year ,p->EngineerBirth.month,p->EngineerBirth.day,p->EngineerPhone);
printf("├──┼────────┴──┴────────┤\n");
printf("│籍贯│%-s │\n",p->EngineerHometown);
printf("├──┼────────────────────┤\n");
printf("│地址│ %-s │\n",p->EngineerAddress);
printf("└──┴────────────────────┘\n");
find=True;
break;
}
}
}
if(!find)
printf("数据不存在!");
break;
case 2:
printf("请输入要搜索的姓名:");
break;

}

return Head;
}
lsmgeb89 2008-10-31
  • 打赏
  • 举报
回复
先说明我不是高手,只是有一些经验吧,只看了几行,就好像看到问题了,
scanf("%d",&choose);后面最好加一句
getchar();这样就可以清除留在缓冲区里的内容,以防下一次scanf时出错。
wyswyg63 2008-10-31
  • 打赏
  • 举报
回复
while(no!=cur->EngineerNo && cur->Next!=NULL)
有问题吧,
直接用while(cur!=NULL)就好了,
no!=cur->EngineerNo这个条件完全没有必要
cur->Next!=NULL这个条件,会导致最后一个用户不会查找,所以应该用cur!=NULL才好
lsmgeb89 2008-10-31
  • 打赏
  • 举报
回复
你应该把运行时碰到的问题说出来,不然别怎么帮你看。

69,369

社区成员

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

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