马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这个程序中的删除函数4(void delPerson(PNODE head))里面我想用if语句来判别,如果输入的信息通讯录中没有数据,就提示printf("未找到要删除的通讯录");但是我输入通讯录没有的数据后程序就崩溃了,想请诸位给解答一下,我到底是那里错了,我已经派了一天的错了,没找到原因。#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Boss
{
char name[120]; //姓名
int number[120]; //电话
char addr[1024]; //地址
struct Boss *next; //信息域
}NODE, *PNODE;
void addPerson(PNODE *head); //插入新的联系人
void my_scanf(PNODE phead); //输入数据函数
void fidPerson(PNODE head); //查找已有联系人
void changePerson(PNODE head); //更改已有联系人
void delPerson(PNODE head); //删除已有联系人
void my_printf(PNODE phead); //显示查找目录
void displayPerson(PNODE head); //显示当前通讯录
void releasePerson(PNODE *head); //退出通讯录程序,释放内存空间
void addPerson(PNODE *head) //插入新的联系人
{
PNODE phead;
static PNODE tail;
phead = (PNODE)malloc(sizeof(NODE));
if(phead == NULL)
{
printf("内存分配失败");
exit(1);
}
my_scanf(phead);
if((*head)->next != NULL)
{
tail->next = phead;
phead->next = NULL;
}
else
{
(*head)->next = phead;
phead->next = NULL;
}
tail = phead;
}
void my_scanf(PNODE phead) //输入数据函数
{
printf("姓名:");
scanf("%s", &phead->name);
printf("电话:");
scanf("%s", &phead->number);
printf("地址:");
scanf("%s", &phead->addr);
}
void fidPerson(PNODE head) //查找已有联系人
{
char temp[120];
printf("请输入你要查找姓名:");
scanf("%s", &temp);
while(head != NULL)
{
if(!strcmp(head->name, temp))
{
my_printf(head);
}
head = head->next;
if(head == NULL)
{
printf("该通讯录中没有%s的信息\n", temp);
}
}
}
void changePerson(PNODE head) //更改已有联系人
{
char temp[120];
PNODE first;
PNODE second;
first = (PNODE)malloc(sizeof(NODE));
printf("请输入你要更改的通讯录:");
scanf("%s",&temp);
/*printf("将%s的目录更改为:\n", temp);*/
/*my_scanf(first);*/
while(head != NULL)
{
if(!strcmp(head->name, temp))
{
printf("将%s的目录更改为:\n", temp);
my_scanf(head);
break;
}
head = head->next;
if(head == NULL)
{
printf("该通讯录中没有%s的信息,可以更改\n", temp);
}
}
/*while(head != NULL)
{
second = head;
head = head->next;
if(!strcmp(head->name, temp))
{
break;
}
}*/
}
void delPerson(PNODE head) //删除已有联系人,并同时释放内存空间
{
char temp[120];
PNODE first;
PNODE second;
printf("请输入你要删除通讯录的姓名:");
scanf("%s", &temp);
while(head != NULL)
{
first = head;
head = head->next;
second = head;
if(!strcmp(head->name, temp))
{
first->next = head->next;
free(second);
break;
}
if(head == NULL)
{
printf("未找到要删除的通讯录");
}
}
}
void my_printf(PNODE phead)
{
printf("以查找的你所需要的信息内容如下:\n");
printf("姓名:%s\n", phead->name);
printf("电话:%s\n", phead->number);
printf("地址:%s\n", phead->addr);
}
void displayPerson(PNODE head) //显示当前通讯录
{
PNODE temp;
temp = head->next;
while(temp != NULL)
{
printf("姓名:%s\n", temp->name);
printf("电话:%s\n", temp->number);
printf("地址:%s\n", temp->addr);
temp = temp->next;
}
}
void releasePerson(PNODE *head) //退出通讯录程序,释放内存空间
{
PNODE temp;
while(*head != NULL)
{
temp = (*head)->next;
*head = (*head)->next;
free(temp);
}
}
int main(void)
{
PNODE head;
head->next = NULL;
int ch;
printf("插入新的联系人'1'\n");
printf("查找已有联系人'2'\n");
printf("更改已有联系人'3'\n");
printf("删除已有联系人'4'\n");
printf("显示当前目录'5'\n");
printf("退出通讯录,并释放空间'6'\n");
while(1)
{
printf("请输入代码:");
if((ch = getchar()) == '1')
{
addPerson(&head);
}
else if(ch == '2')
{
fidPerson(head);
}
else if(ch == '3')
{
changePerson(head);
}
else if(ch == '4')
{
delPerson(head);
}
else if(ch == '5')
{
displayPerson(head);
}
else if(ch == '6')
{
releasePerson(&head);
break;
}
else
{
getchar();
printf("您输入的信息有误请从新输入\n");
}
getchar();
}
return 0;
}
138行要写成 那个删除功能的函数我给改写了一下,, void delPerson(PNODE head) //删除已有联系人,并同时释放内存空间
{
char temp[120];
PNODE first;
PNODE second;
printf("请输入你要删除通讯录的姓名:");
scanf("%s", temp);//这里要写对
if (head->next == NULL){
printf("通讯录为空\n");
return;
}
while (head->next != NULL)
{
first = head;
head = head->next;
second = head;
if (!strcmp(head->name, temp))
{
first->next = head->next;
free(second);
break;
}
if (head->next == NULL)
{
printf("未找到要删除的通讯录");
}
}
}
这个时侯这个功能可以正常运行了,
但是还有主函数中的前两句: PNODE head = (PNODE)malloc(sizeof(NODE));//这里要动态申请空间
head->next = NULL;//这里要是用的话一定要之前动态申请空间啊
不是很明白楼主为啥要head->next = NULL;
我没有看过这个视频,但是感觉这个head->next = NULL;有点怪,还有注意看我的注释,main函数里没有分配空间的话我的VS2013是运行时Runtime Error的,
还有这个程序的功能4是解决了,但是功能6还是有一点问题,自己可以试一下,找一找bug
|