C语言中怎么将文件里的数据创建到(读到)链表中?

简介: 定义的结构体: struct student { char ID[11]; //学生学号 char name[20]; //学生姓名 struct student *next; //next 指针 指向 struct student 类型的变量 }stu; ...

定义的结构体:

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 语言中的数据类型转换:连接不同数据世界的桥梁
C语言中的数据类型转换是程序设计中不可或缺的一部分,它如同连接不同数据世界的桥梁,使得不同类型的变量之间能够互相传递和转换,确保了程序的灵活性与兼容性。通过强制类型转换或自动类型转换,C语言允许开发者在保证数据完整性的前提下,实现复杂的数据处理逻辑。
|
6月前
|
存储 编译器 程序员
c语言的文件操作与文件缓冲区
如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件。磁盘(硬盘)上的文件是文件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序文件、数据文件(从文件功能的角度来分类 的)。就比如说我们电脑中以.txt为后缀的就是文件的一种,他就是数据文件。.exe为后缀的就为程序文件。函数名功能适用范围fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets。
175 0
|
10月前
|
人工智能 C语言
|
10月前
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
213 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
9月前
课时141:链表(数据删除)
1.数据删除的定义 2.在 ILink 接口里面追加新的删除方法 3.后续节点判断 4.完善 LinkImpl 子类中的 remove() 方法
199 0
|
9月前
|
存储
课时140:链表(判断数据是否存在)
在一个集合中往往会保存大量的数据,有时候会需要判断数据是否会存在。我们将使用对象比较的方式( Equals 方法)来实现这个功能。
160 0
|
9月前
|
索引
课时139:链表(修改指定索引数据)
现在已经可以通过索引来获取链表中的指定数据,既然可以获取数据,那么也就可以实现修改指定索引位置的数据这种常见功能。 本节将介绍如何实现这个功能。
195 0
|
11月前
|
存储 小程序 C语言
【C语言程序设计——文件】文件操作(头歌实践教学平台习题)【合集】
本文介绍了C语言中的文件操作,分为两个关卡。第1关任务是将键盘输入的字符(以#结束)存入`file1.txt`并显示输出;第2关任务是从键盘输入若干行文本(每行不超过80个字符,用-1作为结束标志),写入`file2.txt`后再读取并显示。文中详细讲解了文件的打开、读取(使用`fgetc()`和`fgets()`)、写入(使用`fputc()`和`fputs()`)及关闭操作,并提供了示例代码和测试说明。
333 5
|
存储 数据管理 C语言
C 语言中的文件操作:数据持久化的关键桥梁
C语言中的文件操作是实现数据持久化的重要手段,通过 fopen、fclose、fread、fwrite 等函数,可以实现对文件的创建、读写和关闭,构建程序与外部数据存储之间的桥梁。
|
存储 算法 C语言
【C语言】深入浅出:C语言链表的全面解析
链表是一种重要的基础数据结构,适用于频繁的插入和删除操作。通过本篇详细讲解了单链表、双向链表和循环链表的概念和实现,以及各类常用操作的示例代码。掌握链表的使用对于理解更复杂的数据结构和算法具有重要意义。
3542 6