求高人指点,C语言的信息管理(链表)遇到了问题、、、、
#include<stdio.h>#include<stdlib.h>#include<string.h>struct information{char name[16];char 易做图; //w为女性,m为男性int age;struct information* link;};typedef struct information str_information;typedef struct information* pointer;
struct head{int men;int women;pointer link;};
struct head* headlist;
void create_list();void chosefunction();
pointer search();//寻找个人信息位置
void input_information();void input_one();void input_1();void input_2();
void delete_information();void delete_one();void delete_1();void delete_2();
void change_information();void output_information();void count_information();
void finish();
void main(){create_list();chosefunction();}
//创建空链表void create_list(){printf("在进行其他操作之前,必须先创建空链表!\n");printf("创建新链表中--------------------------\n");headlist=(struct head*)malloc(sizeof(struct head));while(headlist==NULL) headlist=(struct head*)malloc(sizeof(struct head));headlist->men=0;headlist->women=0;headlist->link=NULL;printf("创建完成,请选择其他操作!\n\n");}
//功能选择void chosefunction(){int i_choice;printf("\n------功能选择表-----\n");printf("1、输入具体个人信息。\n");printf("2、删除具体个人信息。\n");printf("3、修改具体个人信息。\n");printf("4、输出具体个人信息。\n");printf("5、统计各种信息数据。\n");printf("你的选择:");scanf("%d",&i_choice);switch(i_choice){case 1:input_information();break;case 2:delete_information();break;case 3:change_information();break; case 4:output_information();break;case 5:count_information();break;default:printf("\n输入有误,请重新输入!\n\n"); chosefunction();}}//操作完成,转入主菜单。void finish(){printf("\n----------------操作完成!!----------------\n");chosefunction();}
//第一大功能,输入具体个人信息。void input_information(){int i_choice;printf("---输入具体个人信息--\n");printf("1、输入一个个人信息。\n");printf("2、输入多个个人信息。\n");printf("------3、返回主菜单。\n");printf("你的选择:");scanf("%d",&i_choice); switch(i_choice) { case 1:input_1();break;case 2:input_2();break;case 3:chosefunction();break;default :input_information();}}
//输入个人信息void input_one(){pointer p,q;
if(headlist->link==NULL) { p=(pointer)malloc(sizeof(str_information)); while(p==NULL) p=(pointer)malloc(sizeof(str_information)); p->link=NULL; headlist->link=p;} else{ q=headlist->link; while(q->link!=NULL) q=q->link;
p=(pointer)malloc(sizeof(str_information)); while(p==NULL) p=(pointer)malloc(sizeof(str_information)); p->link=NULL; q->link=p;}
printf("请输入英文名(15个字符以内):");scanf("%s",&p->name);
printf("请输入性别(w为女,m为男):");scanf("%c",&p->易做图);while(1) {if(p->易做图=='w' || p->易做图=='m') break; else { scanf("输入有误,请重新输入!\n"); printf("请输入性别(w为女,m为男):"); scanf("%c",&p->易做图); }}
printf("请输入年龄(范围为0-100):");scanf("%d",&p->age);while(1){if(p->age>0 && p->age<100) break; else { scanf("输入有误,请重新输入!\n"); printf("请输入年龄(范围为0-100):"); scanf("%d",&p->age); }}
if(p->易做图=='w')headlist->women=headlist->women+1;elseheadlist->men=headlist->men+1;}
//输入功能1,输入一个个人信息。void input_1(){input_one();finish();}//输入功能2,输入多个个人信息。void input_2(){int member,counter;printf("请输入你要输入的个人信息数目:");scanf("%d",&member);while(1){ if(member>0) break;else { printf("输入有误,请重新输入!\n"); printf("请输入你要输入的个人信息数目:"); scanf("%d",&member); }}for(counter=0;counter<member;counter++)input_one();finish();}
//第二大功能,删除具体个人信息。void delete_information(){int i_choice;printf("---删除具体个人信息--\n");printf("1、删除一个个人信息。\n");printf("2、删除多个个人信息。\n");printf("------3、返回主菜单。\n");printf("你的选择:");scanf("%d",&i_choice);switch(i_choice){ case 1:delete_1();break; case 2:delete_2();break; case 3:chosefunction();break; default :delete_information();}}
//删除个人信息(关键)void delete_one(){pointer last,del;char search_name[16];printf("请输入英文名进行查找:"); scanf("%s",search_name);
last=search(search_name); if(last==NULL) printf("没有找到任何匹配的个人信息。\n"); else{ del=last->link; last->link=del->link;//这里提示//Loaded 'ntdll.dll', no matching symbolic information found.//Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information //found.//First-chance exception in 链表.exe: 0xC0000005: Access Violation. free(del);}}
//删除功能1,删除一个个人信息void delete_1(){delete_one();finish();chosefunction();}//删除功能2,删除多个个人信息void delete_2(){int member,counter;printf("请输入你要删除的个人信息数目:");scanf("%d",&member);while(1) {if(member>0) break;else { printf("输入有误,请重新输入!\n"); printf("请输入你要删除的个人信息数目:"); scanf("%d",&member); } }for(counter=0;counter<member;counter++)delete_one();finish();chosefunction();}//第三大功能,修改具体个人信息。void change_information(){int i_choice;printf("---修改具体个人信息--\n");printf("1、修改一个个人信息。\n");printf("2、修改多个个人信息。\n");printf("------3、返回主菜单。\n");printf("你的选择:");scanf("%d",&i_choice); switch(i_choice){case 1:break;case 2:break;case 3:chosefunction();break;default :change_information();}}
//第四大功能,输出具体个人信息。(不是关键)void output_information(){int i_choice;printf("---输出具体个人信息--\n");printf("1、输出一个个人信息。\n");printf("2、输出多个个人信息。\n");printf("------3、返回主菜单。\n");printf("你的选择:");scanf("%d",&i_choice);switch(i_choice){case 1:break;case 2:break;case 3:chosefunction();break;default :output_information();}}
//第五大功能,统计各种信息数据。(不是关键)void count_information(){int i_choice;printf("-统计具体个人信息\n");printf("1、统计年龄分布。\n");printf("2、统计性别分布。\n");printf("--3、返回主菜单。\n");printf("你的选择:");scanf("%d",&i_choice);switch(i_choice){case 1:break;case 2:break;case 3:chosefunction();break; default :count_information();}}
//寻找(关键)pointer search(char* search_name){pointer p,q;char compare[16]; strcpy(compare,search_name); if(headlist->link==NULL) return q=NULL;else{
p=headlist->link; q=(pointer)headlist; while(strcmp(p->name,compare)!=0 && p->age!=0 && p->link!=NULL) { q=p; p=p->link; }
if(strcmp(p->name,search_name)!=0 && p->link==NULL) return q=NULL; else return q;//返回所找到结点的前驱}}
谢谢了,就是提示的地方出现了问题,搞了很久也不行,高手指点指点,麻烦了。。提前说声谢谢。。