C语言中怎么将文件里的数据创建到(读到)链表中?
2015-09-03 15:35
351 查看
定义的结构体:
创建文件:
写入文件信息:
这里值得注意的是:写入文件的时候,开始时要事先写入第一个数据,这里写入的空数据,这与链表head处数据为空有关。
从已经写入的文件中读到链表中:
从链表中输出打印到屏幕中数据:
struct student { char ID[11]; //学生学号 char name[20]; //学生姓名 struct student *next; //next 指针 指向 struct student 类型的变量 }stu;
创建文件:
void Create_File_List() { FILE *fp; if ((fp = fopen("student.txt","rb"))==NULL) /*如果此文件不存在*/ { if ((fp = fopen("student.txt","wb+"))==NULL) { outtextxy(220, 200, "无法建立文件!"); } } }
写入文件信息:
/*************** 函数功能:录入出勤学生 /***************/ void add_student( ) { FILE *fp; fp=fopen("student.txt","a+"); strcpy(stu.ID,"");// 与链表head结点 无数据 有关 strcpy(stu.name,""); fwrite(&stu,sizeof(struct student),1,fp); InputBox(stu.ID,11,"请输入学生学号"); outtextxy(380,200,stu.ID); Sleep(500); InputBox(stu.name,20,"请输入学生姓名"); outtextxy(380,250,stu.name); Sleep(500); fwrite(&stu,sizeof(struct student),1,fp); fclose(fp); }
这里值得注意的是:写入文件的时候,开始时要事先写入第一个数据,这里写入的空数据,这与链表head处数据为空有关。
从已经写入的文件中读到链表中:
/*************** 函数功能:创建链表 /***************/ struct student * CreateList() { struct student *pointer,*head,*q;//head指针为链表的头结点,是找到链表的唯一依据,如果head指针丢失,那么整个链表就找不到了;p指针总是指向新申请的结点;q指针总是指向尾节点 struct student temp;//定义结构体别名 FILE *fp; pointer=(struct student *)malloc(sizeof(struct student )); // p指向新开辟的节点内存 head = pointer; //开辟头结点内存 头结点中没有学生成绩信息 q = pointer; //开辟尾节点内存 q指针总是指向尾节点 q->next = NULL; // //标志链表的结束 尾节点的特点是next成员的值为NULL,它是最后一个节点,作为链表结束的标志,NULL是一个符号常量表示值为0的地址 fp=fopen("student.txt","rb"); while(fread(&temp,sizeof(struct student),1,fp)!=0)//从文件中读结构体块 { pointer=(struct student*)malloc(sizeof(struct student)); // p指向新开辟的节点内存 strcpy(pointer->ID,temp.ID); strcpy(pointer->name,temp.name); q->next=pointer; //把新节点挂到原尾节点之后 q=q->next; //q指针指向新的尾节点 } q->next=NULL;//标志链表的结束 fclose(fp); return head; }
从链表中输出打印到屏幕中数据:
/*************** 函数功能: 输出链表 返回:指向链表表头的指针 /***************/ void Print_List(struct student *head) { struct student* pointer; pointer=head->next; //跳过无数据的头结点 while(pointer!=NULL) { outtextxy(x,y,pointer->ID); outtextxy(x,y,pointer->name); pointer=pointer->next;//指向下一个节点 } }
相关文章推荐
- c++数组宽度计算的sizeof关于指针设想
- Effective C++ 改善程序与设计的55个具体做法 二周目笔记01
- C++ I/O流文件处理(整型,字符,字符串)
- C++智能指针原理
- C++之随笔(一)
- POJ C++程序设计 编程题#4 字符串操作
- twoSum(C++)
- 【more effective c++读书笔记】【第5章】技术(2)——限制某个class所能产生的对象数量
- 【more effective c++读书笔记】【第5章】技术(2)——限制某个class所能产生的对象数量
- c++STL容器
- C语言访问MCU寄存器的三种方式
- 【模板】c++ template模板实现string到Num的转换
- C++中泛型算法
- C语言实现冒泡排序-整数排序
- 【C/C++学院】0730-网站以及后门/结构体对齐、结构体面试分析/深拷贝与浅拷贝/队列/字符串封装
- C语言链表中数组实现数据选择排序,升序、降序功能主要难点
- C语言链表中数组实现数据选择排序,升序、降序功能主要难点
- C++中构造函数和析构函数的调用顺序
- C++面向对象编程
- C++ 静态成员的类内初始化