对文件的增删查改一般都是将文件数据传输到链表上的,然后在链表上对数据进行处理,其主要有有两个关键,
1.文件数据传输到链表中
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
结构体
typedef struct student
{
int id_student; //学号
int score_c_student; //C成绩
int score_math_student;
char class_student[20];
char name_student[20];
struct student *next;
}student_fu;
头节点的分配内存空间
student_fu *head = (student_fu *)malloc(sizeof(student_fu));
if(head!=NULL)
{
head->next=NULL;
}
打开文件
FILE *fp = fopen("student.txt","r");
if(!fp)
{
perror("fopen");
exit(0);
}
文件到链表
student_fu *tmp=head;
student_fu *exchang=head;
int id_student; //学号
int score_c_student; //C成绩
int score_math_student;
char class_student[20];
char name_student[20];
while(fscanf(fp," %d %s %s %d %d", &id_student,name_student,class_student,&score_c_student,&score_math_student)!=EOF)
{
//数据从文件放在链表里面
tmp=(student *)malloc(sizeof(student));
tmp->id_student=id_student;
strcpy(tmp->name_student,name_student);
strcpy(tmp->class_student,class_student);
tmp->score_c_student=score_c_student;
tmp->score_math_student=score_math_student;
exchang->next=tmp;
exchang=tmp;
}
exchang->next=NULL;
fclose(fp);
2.链表数据传输到文件中
student_fu *tmp1=head->next;
printf(" 全部学生的信息 \n");
printf(" id 姓名 班级 C成绩 数学\n");
while(tmp1!=NULL)
{
fprintf(stdout," %-5d %-8s %-11s %-6d %-8d\n", tmp1->id_student,tmp1->name_student,tmp1->class_student,tmp1->score_c_student,tmp1->score_math_student);
tmp1=tmp1->next;
}
printf("\n");
stdout打印到屏幕上显示,可以改为其他的文件流指针如:fp