【发布时间】:2021-11-01 04:16:09
【问题描述】:
我在 C 中搜索链表时遇到问题。我设法搜索并找到一个整数条目,但在字符串(名字和姓氏)方面遇到问题。基本上,有三个功能可以按名字、姓氏和号码在电话簿中搜索条目。是否也可以在找到搜索时显示该条目?请在下面找到代码。感谢您的帮助。
struct node {
char firstname[32];
char lastname[32];
int *number;
struct node *next;
}*head;
struct node *start=NULL;
struct node *getnode() {
return((struct node *)malloc(sizeof(struct node)));
}
void insert() {
struct node *temp,*nn;
nn=getnode();
temp=start;
while(temp->next!=NULL)
{
temp=temp->next;
}
printf("Enter First name:\n");
scanf("%s",&nn->firstname);
printf("Enter Last name:\n");
scanf("%s",&nn->lastname);
printf("Enter number:\n");
scanf("%d",&nn->number);
temp->next=nn;
nn->next=NULL;
display(start);
}
struct node *create() {
struct node *temp,*nn;
if(start!=NULL) insert();
else {
nn=getnode();
start=nn;
temp=start;
printf("Enter First name:\n");
scanf("%s",&nn->firstname);
printf("Enter Last name:\n");
scanf("%s",&nn->lastname);
printf("Enter number:\n");
scanf("%d",&nn->number);
nn->next=NULL;
}
}
void searchByFirstName() {
char *f;
struct node* temp, *nn;
temp = start;
while (temp != NULL){
printf("Enter First Name to be searched:\n"); scanf("%s",&f);
printf("%s", &f);
if (temp -> firstname == f){
printf ("\n Record Found!\n");
temp = temp -> next;
}else{
printf ("\n Record not found\n");
}
}
}
void searchByLastName() {
char *f;
struct node* temp, *nn;
temp = start;
if (temp != NULL){
printf("Enter Last Name to be searched:\n"); scanf("%s",&f);
printf("%s", &f);
if (temp -> lastname == f){
printf ("\n Record Found!\n");
temp = temp -> next;
}else{
printf ("\n Record not found\n");
}
}
}
void searchByNumber() {
int *l;
struct node* temp, *nn;
temp = start;
if (temp != NULL){
printf("Enter Number to be searched:\n"); scanf("%d",&l);
if (temp -> number == l){
printf ("\n Record Found!\n");
temp = temp -> next;
}else{
printf ("\n Record not found\n");
}
}
}
【问题讨论】:
-
为什么
number是一个指针?你从来没有分配内存让它指向。' -
扫描成字符串时不要使用
&。 -
你从未为
f分配内存。 -
这段代码有很多问题,你需要复习你对字符串和指针的注释。
-
按号码搜索有用吗?看起来您应该只使用
int l,而不是指针类型(在scanf中,您使用指向 int 的指针,而不是指向 int 的指针)
标签: c string search linked-list