大侠们帮我看下这个简单的程序错在哪

hui135 2009-06-14 06:42:54
#include<iostream.h>
#include<iomanip.h>
#include<string.h>

typedef struct person //个人信息结构
{
char name[10];
char address[30];
char phonenum[12];
struct person *next;
}person;

//通讯录
class tongxun
{
public:
tongxun()
{
h=new person;
strcpy(h->name,"name");
strcpy(h->address,"address");
strcpy(h->phonenum,"phonenum");
h->next=NULL;
}

person *creat()
{

x=new person;
cout<<"请输入一个人的姓名:"<<endl;
cin>>x->name;
cout<<"请输入一个人的地址:"<<endl;
cin>>x->address;
cout<<"请输入一个人的电话:"<<endl;
cin>>x->phonenum;
x->next=NULL;
return(x);
}

void insert(person *y)
{
p=h;
s=h;
p=p->next;
if(p==NULL)
{
s->next=y;
}
else
{
while(p!=NULL && strcmp(p->name,y->name)<0)
{
s=p;
p=p->next;
}
if(p==NULL)
{
s->next=y;
}
else
{
y->next=s->next;
s->next=y;

}
}
p=NULL;
s=NULL;
y=NULL;

}

void out()
{
p=h;
p=p->next;
while(p!=NULL)
{
cout<<"姓名是:"<<p->name<<endl;
cout<<"地址是:"<<p->address<<endl;
cout<<"电话是:"<<p->phonenum<<endl;
p=p->next;
cout<<endl;
}
p=NULL;
}

void search(char *lname)
{
p=h;
p=p->next;
while(p!=NULL && strcmp(p->name,lname)!=0)
{
p=p->next;
}
if(p!=NULL)
{
cout<<"姓名是:"<<p->name<<endl;
cout<<"地址是:"<<p->address<<endl;
cout<<"电话是:"<<p->phonenum<<endl;
p=NULL;
}
else
{
cout<<"没找到此人信息!"<<endl;
p=NULL;
}



}
~tongxun()
{
}

private:
person *h,*p,*x,*s;
};

void main()
{

person *d;
tongxun t;
int k;
do
{
cout<<endl;
cout<<"\n\n 1. 建立个人通讯录 ";
cout<<"\n\n 2. 查找某人信息";
cout<<"\n\n 3. 结束程序运行";
cout<<"\n======================================";
cout<<"\n 请输入您的选择 (1,2,3)";
cin>>k;
switch(k)
{
case 1:
{
int i;
cout<<endl;
cout<<setw(5)<<"1.录入!"<<endl;
cout<<setw(5)<<"2.停止录入"<<endl;
cin>>i;
if(i==1)
{
while(i==1)
{

d=t.creat();
t.insert(d);
cout<<"1.录入!"<<setw(5)<<endl;
cout<<setw(5)<<"2.停止录入"<<endl;
cin>>i;
}
t.out();
}

} break;
case 2:
{
cout<<"请输入要查找某人的姓名:"<<endl;
cin>>d->name;
t.search(d->name);
} break;
} /* switch */

cout<<endl;
}while(k>=1 && k<3);
}

出现的问题:
查找异常
...全文
84 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hui135 2009-06-19
  • 打赏
  • 举报
回复
6楼说的很有道理,我试过了,完全正确,谢啦 ,也谢谢其他大侠 了哈!
hui135 2009-06-15
  • 打赏
  • 举报
回复
6楼说得不错,我先去试试看,其他的代码优化和问题只有慢慢来了,先把功能实现了再说吧!
短腿的兔子 2009-06-14
  • 打赏
  • 举报
回复
mark
点墨 2009-06-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hqin6 的回复:]
C/C++ code
p=h;
p=p->next;

是不是该

h=p;
p=p->next;

啊?
[/Quote]
这句什么意思?
不过程序里确实还是有不少代码优化方面的问题(不过,我还不是“大侠”)。
太乙 2009-06-14
  • 打赏
  • 举报
回复

p=h;
p=p->next;

是不是该

h=p;
p=p->next;

啊?
herman~~ 2009-06-14
  • 打赏
  • 举报
回复
mark
点墨 2009-06-14
  • 打赏
  • 举报
回复
    case 2: 
{
cout < <"请输入要查找某人的姓名:" < <endl;
cin>>d->name;
t.search(d->name);
} break;

在输入要查询的姓名的这个地方,你把输入的姓名赋给刚刚输入的一个人,而又对这个姓名进行搜索,当然总是搜索刚输入的这个人的信息,不过他的姓名已经被你要查的人的姓名给代替了。你可以新定义一个字符数组来存储要查询的人的姓名。

另外,还有些其他的错误不知你发现没有,比如主界面输入1、2、3之外的数。
hui135 2009-06-14
  • 打赏
  • 举报
回复
比如说我建立了姓名为a,b,c的三个人信息,在主界面里选2.查找某人信息,查找a,之后再一次查找某人信息,查b,c,结果就不对了
tkminigame 2009-06-14
  • 打赏
  • 举报
回复
举例说明,你说查找异常,我知道什么查找异常。
hui135 2009-06-14
  • 打赏
  • 举报
回复
查找异常啊,查找结果不对
pengzhixi 2009-06-14
  • 打赏
  • 举报
回复
我这编译没什么问题啊
hui135 2009-06-14
  • 打赏
  • 举报
回复
忘了说了,题目是这样的:

用链表建立通讯录。通讯录内容有:姓名、通讯地址、电话号码。
要求:(1)通讯录是按姓名项的字母顺序排列的;(2)能查找通讯录中某人的信息。
[提示] 可用链表来存放这个通讯录,一个人的信息作为一个结点。成链的过程可以这样考虑:先把头结点后面的第一个数据元素结点作为链中的首结点,也是末结点。从第二个数据开始逐一作为‘工作结点’,需从链表的首结点开始比较,如果‘工作结点’的数据比链中的‘当前结点’的数据小,就插在其前面。否则,再看后面是否还有结点,若没有结点了就插在其后面成为末结点;若后面还有结点,再与后面的结点逐一比较处理。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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