|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
|
|