单链表的通讯录作业
main函数#include <stdio.h>
#include "add.h"
#include "display.h"
#include "find.h"
struct Address
{
char name;
char number;
struct Address* next;
};
int main(void)
{
printf("| 欢 迎 使 用 通 讯 录 管 理 程 序 |\n");
printf("|--- 1:插入新的联系人 ---|\n");
printf("|--- 2:查找已有联系人 ---|\n");
printf("|--- 3:更改已有联系人 ---|\n");
printf("|--- 4:删除已有联系人 ---|\n");
printf("|--- 5:显示当前通讯录 ---|\n");
printf("|--- 6:退出通讯录程序 ---|\n");
printf("|---Power by Rui Qiang---|\n");
putchar('\n');
int caozuo;
struct Address* contacts;
while (1)
{
printf("请输入指令代码:");
scanf("%d", &caozuo);
//输入操作代码
//操作1添加联系人
if (caozuo == 1)
{
addperson(&contacts);
}
//操作2搜索联系人
else if (caozuo == 2)
{
struct Address *person;
char target;
printf("请输入需要搜索的联系人信息:");
scanf("%s", target);
person = findPerson(contacts, target);
if(person == NULL)
{
printf("对不起,没找到!\n");
}
else
{
findResult(person);
}
}
//操作3
else if (caozuo == 3)
{
printf("操作3");
}
//操作4
else if (caozuo == 4)
{
printf("操作4");
}
//操作5显示联系人
else if (caozuo == 5)
{
displayContacts(contacts);
}
//操作6
else if (caozuo == 6)
{
printf("操作6");
break;
}
putchar('\n');
}
return 0;
}
添加联系人函数
#include <stdio.h>
#include <stdlib.h>
struct Address
{
char name;
char number;
struct Address* next;
};
void getInput(struct Address* persons)
{
printf("请输入联系人名字(不要加空格):");
scanf("%s", persons->name);
printf("请输入联系人联系方式:");
scanf("%s", persons->number);
}
void addperson(struct Address** persons)
{
struct Address* person;
static struct Address* tail;
person = (struct Address*)malloc(sizeof(struct Address));
if (person == NULL)
{
printf("分配内存失败");
exit(1);
}
getInput(person);
if (*persons == NULL)
{
*persons = person;
person->next = NULL;
}
else
{
tail->next = person;
person->next = NULL;
}
tail = person;
}
搜索函数
#include <stdio.h>
#include <string.h>
struct Address
{
char name;
char number;
struct Address* next;
};
struct Address* findPerson(struct Address *contacts,char *target)
{
struct Address *person;
person = contacts;
while(1)
{
if(!strcmp(person->name, target) || !strcmp(person->number, target))
{
break;
}
person = person->next;
}
return person;
}
void findResult(struct Address *person)
{
printf("结果是:\n");
printf("联系人:%s\n",person->name);
printf("联系方式:%s\n", person->number);
}
展示联系人信息函数
#include <stdio.h>
struct Address
{
char name;
char number;
struct Address* next;
};
void displayContacts(struct Address *contacts)
{
struct Address *person;
person = contacts;
int count = 1;//计数联系人第几号
while(person != NULL)
{
printf("联系人%d:", count);
printf("%s\n", person->name);
printf("联系方式:");
printf("%s\n", person->number);
count++;
person = person->next;
putchar('\n');
}
}
在我编写好添加联系人函数和显示函数后,运行没有问题,但是把搜索联系人函数加进去后就有问题了
很抱歉,您没有提供足够的信息让我能够回答您的问题。请提供更具体的问题或上下文,这样我才能够帮助您。谢谢! 本帖最后由 yinda_peng 于 2023-9-13 16:42 编辑
这个报错发生在tail这一句的话,有可能是tail->next为空然后去写入,就会报这个错误,但是你说你在没有加入搜索函数之前是正常的,可能是你将tail设置为静态变量的问题,但问题在于你的搜索函数并没有用到tail,我初步暂时没有看出问题所在
本帖最后由 yinda_peng 于 2023-9-13 17:22 编辑
跑你的代码情况相同,不过我不懂汇编,看了debug也不太明白,尝试过给tail一个初始值等一些操作但是没有用,可能我没办法解决你的问题
页:
[1]