编译是没问题,可是在写数据到链表时就出现问题了,我找不到问题在哪,大家帮个忙,谢谢!
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct student
{
char name[10];
unsigned long mbp_home;
unsigned long mbp_college;
unsigned long tel;
char ad[10];
struct student *next;
};
typedef struct student ST;
//-----------------------------------------------------
void welcome(void)
{
printf("\n\n\n\n");
printf("\t\t******************欢*迎*使*用*******************\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t* 五班通讯录 *\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t* Alpha 1.0 *\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t* 制作人: Hugh *\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t************************************************\n");
system("pause");
system("cls");
}
//------------------------------------------------------
void menu(void)
{
printf("\n\n\n\n");
printf("\t\t************************************************\n");
printf("\t\t* *\n");
printf("\t\t* 1.列出所有成员及电话 *\n");
printf("\t\t* *\n");
printf("\t\t* 2.根据姓名搜索信息 *\n");
printf("\t\t* *\n");
printf("\t\t* 3.添加信息 *\n");
printf("\t\t* *\n");
printf("\t\t* 4.更改信息 *\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t* 0.退出 *\n");
printf("\t\t* *\n");
printf("\t\t************************************************\n");
}
//----------------------------------
void end(void)
{
printf("\n\n\n\n");
printf("\t\t************************************************\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t* 五班通讯录 *\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t* Alpha 1.0 *\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t* 制作人: Hugh *\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t* *\n");
printf("\t\t************************************************\n");
printf("按任意键退出!");
getch();
}
//-----------------------------------
void list(FILE* l)
{
}
//-----------------------------------
ST* add(ST* head)
{
char r;
ST* p=NULL,* pr=head;
do
{
p=(ST*)malloc(sizeof(ST));
if (p=NULL)
{
printf("你的电脑太糟糕了,居然没有内存了!\n\n按任意键关闭程序!\n\n");
getch();
exit(0);
}
if(head==NULL)
{
head=p;
}
else
{
while(pr->next!=NULL)
{
pr=pr->next;
}
pr->next=p;
}
pr=p;
printf("(以下信息没有的填“0”)\n\n");
printf("请输入姓名:");
scanf(" %s",&pr->name); //运行到这儿就出问题了,求解释
printf("请输入假期手机号:");
scanf(" %d",&pr->mbp_home);
printf("请输入学校用手机号:");
scanf(" %d",&pr->mbp_college);
printf("请输入固定电话:");
scanf(" %d",&pr->tel);
printf("请输入学校所在地:");
scanf(" %s",&pr->ad);
pr->next=NULL;
printf("需要再添加吗?(Y/N): ");
scanf(" %c",&r);
} while (r=='y'||r=='Y');
system("cls");
return head;
}
//--------------------------------------
void save(FILE* fp,ST* head)
{
ST* p=head;
while (p!=NULL)
{
fwrite(p,sizeof(ST),1,fp);
}
printf("存储完毕!\n\n按任意键继续!");
getch();
system("cls");
}
//-------------------------------------
main()
{
char c;
FILE *fp;
ST *head=NULL;
welcome();
fp=fopen(".\\information.txt","r+");
if(fp==NULL)
{
printf("文件已不存在,请重新下载源文件或确保文件在根目录下并以information.txt命名。\n\n\n下载地址:\n\n五班公邮:\t\n\n密码:\t\t\n\n\n\n");
getch();
return 0;
}
do
{
int i=0;
do
{
menu();
if(i==0)
{
printf("输入你的选择:");
}
else
{
printf("输入错误,请重新输入:");
}
i=1;
scanf(" %c",&c);
system("cls");
} while (!(c>='0'&&c<='4'));
switch(c)
{
case '0':
end();
fclose(fp);
free(head);
return 0;
case '1':
list(fp);
break;
case '2':
break;
case '3':
head=add(head);
fp=freopen(".\\information.txt","w+",fp);
save(fp,head);
break;
case '4':
break;
}
} while (1);
}
咋眼一看,这地方错咯~~