void show()
{
FILE * fp;
int clas;
long long stu_code;
long long id_code;
char sex[5];
char enyear[10];
char birthday[20];
char major[10];
char name[10];
struct stu_node * tail, * head=NULL;
struct stu_node * pMove;
struct stu_node * n;
if((fp=fopen("test.dat","r"))==NULL)
{
fp=fopen("test.dat","w+");
fclose(fp);
}
while(fscanf(fp,"%s%s%s%d%s%lld%lld%s\n",name,sex,major,&clas,birthday,&stu_code,&id_code,enyear)!=EOF)
{
n=(struct stu_node * )malloc(sizeof(struct stu_node));
n->clas=clas;n->stu_code=stu_code,n->id_code=id_code;
strcpy(n->name,name);strcpy(n->sex,sex);
strcpy(n->major,major);strcpy(n->enyear,enyear);
strcpy(n->birthday,birthday);
if(head==NULL) head=n;
else tail->next=n;
tail=n;
}
fclose(fp);
pMove=head;
printf("姓名\t性别\t专业\t班级\t出生日期\t学籍号\t身份证号\t入学日期\n");
while(pMove!=NULL)
{
printf("%s\t%s\t%s\t%d\t%s\t%lld\t%lld\t%s\n",pMove->name,pMove->sex,pMove->major,pMove->clas,pMove->birthday,pMove->stu_code,pMove->id_code,pMove->enyear);
pMove=pMove->next;
}
}
修改如下,供参考:
void show()
{
FILE* fp;
int clas;
long long stu_code, id_code;
char sex[5], enyear[10], birthday[20], major[10], name[10];
struct stu_node* tail = NULL, * head = NULL, * pMove = NULL, * n = NULL;
if ((fp = fopen("test.dat", "r")) == NULL)
{
fp = fopen("test.dat", "w+");
fclose(fp);
return;
}
while (1)
{
if (fscanf(fp,"%s%s%s%d%s%lld%lld%s\n", name, sex, major, &clas,
birthday, &stu_code, &id_code, enyear) != 8) break;
n = (struct stu_node*)malloc(sizeof(struct stu_node));
n->next = NULL;
n->clas = clas; n->stu_code = stu_code, n->id_code = id_code;
strcpy(n->name, name); strcpy(n->sex, sex);
strcpy(n->major, major); strcpy(n->enyear, enyear);
strcpy(n->birthday, birthday);
if (head == NULL)
head = n;
else
tail->next = n;
tail = n;
}
fclose(fp);
pMove = head;
printf("姓名\t性别\t专业\t班级\t出生日期\t学籍号\t身份证号\t入学日期\n");
while (pMove != NULL)
{
printf("%s\t%s\t%s\t%d\t%s\t%lld\t%lld\t%s\n", pMove->name, pMove->sex, pMove->major,
pMove->clas, pMove->birthday, pMove->stu_code, pMove->id_code, pMove->enyear);
pMove = pMove->next;
}
}
字符数组初始化一下
char enyear[10]={'\0'};
char birthday[20]={'\0'};
char major[10]={'\0'};
char name[10]={'\0'};
可能你某个字符串定义的长度不足