更改联系人和删除联系人的功能出现问题,不知到代码哪里有问题
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Person
{
char name[40];
char phone[20];
struct Person *next;
};
void add(struct Person **contacts);
struct Person *search(struct Person *contacts);
void change(struct Perosn *contacts);
void delect(struct Person **contacts);
void display(struct Person *contacts);
void release(struct Person **contacts);
void add(struct Person **contacts)
{
struct Person *temp;
struct Person *person;
person = (struct Person*)malloc(sizeof(struct Person));
if(person == NULL)
{
printf("wrong");
exit(1);
}
printf("请输入姓名:");
scanf("%s",person->name);
printf("请输入电话号码:");
scanf("%s",person->phone);
if(contacts != NULL)
{
temp = *contacts;
*contacts = person;
person->next = temp;
}
else
{
*contacts = person;
person->next = NULL;
}
}
struct Person *search(struct Person *contacts)
{
struct Person *person;
char input[40];
printf("请输入联系人:");
scanf("%s",&input);
person = contacts;
while(person != NULL && strcmp(person->name,input))
{
person = person->next;
}
return person;
}
void change(struct Person *contacts)
{
struct Person *person;
person = search(person);
if(person == NULL)
{
printf("查找不到该联系人");
}
else
{
printf("请输入新的联系电话");
scanf("%s",person->phone);
}
}
void delect(struct Person **contacts)
{
struct Person *person;
struct Person *now;
struct Person *past;
person = search(person);
if(person == NULL)
{
printf("查找不到该联系人");
}
else
{
now = *contacts;
past = NULL;
while(now != NULL && now != person)
{
past = now;
now = now->next;
}
if(past == NULL)
{
*contacts = now->next;
}
else
{
past->next = now->next;
}
}
free(person);
}
void display(struct Person *contacts)
{
struct Person *person;
person = contacts;
while(person != NULL)
{
printf("联系人:%s\n",person->name);
printf("电话号码:%s\n",person->phone);
person = person->next;
}
}
void release(struct Person **contacts)
{
struct Person *temp;
while(*contacts != NULL)
{
temp = *contacts;
*contacts = (*contacts)->next;
free(temp);
}
}
int main(void)
{
int code;
struct Person *person;
struct Person *contacts = NULL;
printf("欢迎使用通讯录\n");
printf("添加新的联系人请按1\n");
printf("查找已有联系人请按2\n");
printf("更改已有联系人请按3\n");
printf("删除已有联系人请按4\n");
printf("显示当前通讯录请按5\n");
printf("退出当前通讯录请按6\n");
while(1)
{
printf("请输入指令:");
scanf("%d",&code);
switch(code)
{
case 1:add(&contacts);break;
case 2: person = search(contacts);
if(person == NULL)
{
printf("查找不到该联系人");
}
else
{
printf("联系人:%s\n",person->name);
printf("电话号码:%s\n",person->phone);
}
break;
case 3:change(contacts);break;
case 4:delect(&contacts);break;
case 5:display(contacts);break;
case 6:goto end;
}
}
end:
release(&contacts);
return 0;
}
修改如下,改动处见注释,供参考:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Person
{
char name[40];
char phone[20];
struct Person *next;
};
void add(struct Person **contacts);
struct Person *search(struct Person *contacts);
void change(struct Perosn *contacts);
void delect(struct Person **contacts);
void display(struct Person *contacts);
void release(struct Person **contacts);
void add(struct Person **contacts)
{
struct Person *temp;
struct Person *person;
person = (struct Person*)malloc(sizeof(struct Person));
if(person == NULL)
{
printf("wrong");
exit(1);
}
printf("请输入姓名:");
scanf("%s",person->name);
printf("请输入电话号码:");
scanf("%s",person->phone);
if(contacts != NULL)
{
temp = *contacts;
*contacts = person;
person->next = temp;
}
else
{
*contacts = person;
person->next = NULL;
}
}
struct Person *search(struct Person *contacts)
{
struct Person *person;
char input[40];
printf("请输入联系人:");
scanf("%s", input); //scanf("%s",&input); 修改
person = contacts;
while(person != NULL && strcmp(person->name,input))
{
person = person->next;
}
return person;
}
void change(struct Person *contacts)
{
struct Person *person;
person = search(contacts); //person = search(person); 修改
if(person == NULL)
{
printf("查找不到该联系人\n");
}
else
{
printf("请输入新的联系电话");
scanf("%s",person->phone);
}
}
void delect(struct Person **contacts)
{
struct Person *person;
struct Person *now;
struct Person *past;
person = search((*contacts)); //person = search(person); 修改
if(person == NULL)
{
printf("查找不到该联系人\n");
}
else
{
now = *contacts;
past = NULL;
while(now != NULL && now != person)
{
past = now;
now = now->next;
}
if(past == NULL)
{
*contacts = now->next;
}
else
{
past->next = now->next;
}
}
free(person);
}
void display(struct Person *contacts)
{
struct Person *person;
person = contacts;
while(person != NULL)
{
printf("联系人:%s\n",person->name);
printf("电话号码:%s\n",person->phone);
person = person->next;
}
}
void release(struct Person **contacts)
{
struct Person *temp;
while(*contacts != NULL)
{
temp = *contacts;
*contacts = (*contacts)->next;
free(temp);
}
}
int main(void)
{
int code;
struct Person *person;
struct Person *contacts = NULL;
printf("欢迎使用通讯录\n");
printf("添加新的联系人请按1\n");
printf("查找已有联系人请按2\n");
printf("更改已有联系人请按3\n");
printf("删除已有联系人请按4\n");
printf("显示当前通讯录请按5\n");
printf("退出当前通讯录请按6\n");
while(1)
{
printf("请输入指令:");
scanf("%d",&code);
switch(code)
{
case 1:add(&contacts);break;
case 2: person = search(contacts);
if(person == NULL)
{
printf("查找不到该联系人");
}
else
{
printf("联系人:%s\n",person->name);
printf("电话号码:%s\n",person->phone);
}
break;
case 3:change(contacts);break;
case 4:delect(&contacts);break;
case 5:display(contacts);break;
case 6:goto end;
}
}
end:
release(&contacts);
return 0;
}
具体啥问题
【以下回答由 GPT 生成】
我遇到的具体问题是更改联系人和删除联系人的功能出现问题。我不知道代码哪里有问题。
【相关推荐】