C语言:文件数据传到链表,在将链表数据传回文件

          对文件的增删查改一般都是将文件数据传输到链表上的,然后在链表上对数据进行处理,其主要有有两个关键,

    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;
        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 

猜你喜欢

转载自blog.csdn.net/weixin_41215479/article/details/81296229