69,369
社区成员
发帖
与我相关
我的任务
分享
void save(struct student *head)
{
FILE *write;
struct student *p1;
p1 = head;
if(p1 == NULL)
{
system("cls");
printf("学生信息为空,保存失败!\n");
system("pause");
return;
}
printf("请输入保存的文件名: ");
scanf("%s",filename);
strcat(filename,".txt");
write = fopen(filename,"wb");
while(p1 != NULL)
{
fprintf(write,"%s %s %d %s %s %s %s %s %s %s\n",p1->num,p1->name,p1->age,p1->sex,p1->height,p1->birtday,p1->grades,p1->tel,p1->qq,p1->addr);
p1 = p1->next;
}
fseek(write,0,SEEK_SET);
fclose(write);
printf("保存成功\n");
system("pause");
system("cls");
}
void readfile()
{
char ch;
FILE *fp;
struct student *p = NULL,*q=NULL;
fp = fopen("k.txt","r");
p = (struct student *)malloc(sizeof(struct student));
memset(p,0,sizeof(sizeof(struct student)));
Link = p;
Link->next=NULL;
while(!feof(fp))
{
q=(struct student *)malloc(sizeof(struct student));
memset(q,0,sizeof(sizeof(struct student)));
fscanf(fp, "%s %s %d %s %s %s %s %s %s %s",q->num,q->name,&q->age,q->sex,q->height,q->birtday,q->grades,q->tel,q->qq,q->addr);
printf("刷新学生信息:\n");
printf(" %-4s %-4s %-4d %-4s%-4s%-4s%-4s %-4s %-4s %-4s \n",q->num,q->name,q->age,q->sex,q->height,q->birtday,q->grades,q->tel,q->qq,q->addr);
p->next=q;
p=q;
}
q->next = NULL;
if(fclose(fp))
{
printf("文件异常关闭");
exit(1);
}
fclose(fp);
}
fscanf(fp, "%s%s%d%s%s%s%s%s%s%s",q->num,q->name,&q->age,q->sex,q->height,q->birtday,q->grades,q->tel,q->qq,q->addr);
这样试试,fscanf会自己跳过空格。
用格式化输入输出做数据存储总是很多问题,我一般要用纯文本存储数据的话,都是以行为单位写,以行为单位读再进行分析,用csv格式;或者干脆用xml格式。