这个c++电话簿问题在哪呀?

来源:百度知道 编辑:UC知道 时间:2024/05/08 18:52:08
/************************************************************************
现在有一电话号码本,号码本中有姓名、电话号码,当输入电话号码时,查找出
姓名与电话号码,输入姓名时找出姓名与电话号码。还允许不完全输入查找,如输入0
10时查找出所有以010开头的号码。
*************************************************************************/
#include<iostream>
using namespace std;
struct telebook
{
char name[20];
char num[20];
struct telebook *next;
};
typedef telebook node;
void search(node *head)
{
char ch[20];node *p;
int n,flag=0;
p=head;
cout<<"input character to search:";
cin>>ch;
n=strlen(ch);
while(p->next!=NULL)
{
if(strcmp(p->next->name,ch,n)==0||strcmp(p->next->num,ch,n)==0)
{
cout<<p->next->name<<" "<<p->next->num<<endl;
flag=1;
}
p=p->next;
}
if(flag==0) cout<<"no found!"<<endl;<

1
strcmp改为strncmp
2
另外,你在main()函数进行初始化链表的时候,没有把链表廉洁起来,你的head 指针只是一个头指针,其指向是空。search是可以的
给你改了下:
void main()
{
node * np1,*np,*head; ///////////////////
int n,i;
char name[20], num[20];
if((np=new node)==NULL)
{
cout<<"new node fail!"<<endl;
exit(0);
}
np1=head=np; ////////////////////////

head->next=NULL;
cout<<"how many number to record:";
cin>>n;
cout<<"input name and telephone number:"<<endl;
for(i=0;i<n;i++)
{
while(n)
{
cout<<"input the "<<n<<" record"<<endl;
cin>>name>>num;

if((np=new node)==NULL)
{
cout<<"new node fail!"<<endl;
exit(0);
}
strcpy(np->name,name);
strcpy(np->num,n