关于##include#的问题,如何解决?

更改联系人和删除联系人的功能出现问题,不知到代码哪里有问题


#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 生成】

我遇到的具体问题是更改联系人和删除联系人的功能出现问题。我不知道代码哪里有问题。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^