有时候,我们需要将输入的数据存储起来,这时候就需要用到文件,对于C语言而言,文件的读写有多种方式,下面主要是结构体文件的读写,例如student.dat(第一列是学号,第二列是姓名)

    xiaoming
小明

1.定义结构体

//定义一个结构体
typedef struct Student{
int stu_id;
char name[];
} Stu;

2.写数据

// 定义一个文件指针
FILE *fp ; // 初始化一个结构体数组
Stu stuw[] = {
{, "xiaoming" },
{, "小明"}
} ; // 打开文件,没有文件自动创建
fp = fopen("student.dat","wb"); // b:表示以二进制写入
// 写入数据
fwrite( (char*)stuw,sizeof(Stu),,fp); //2:表示将数组中两个元素写入文件
// 关闭文件
fclose(fp);

3.读数据

// 定义一个文件指针
FILE *fp ;
// 定义一个buf结构体,用于得到文件内容
struct stat buf;
// 定义一个文件行数记录变量
int rows;
// 定义一个Student结构体
Stu stur[MAX]; // MAX通过#define设置为100 // 求文件中的行数(记录个数)
stat("student.dat",&buf);
rows = buf.st_size/sizeof(Stu); // 打开文件
fp = fopen("student.dat","rb");
// 读取数据到数组中
fread((char *)stur,sizeof(Stu),rows,fp);
// 关闭文件
fclose(fp); // 遍历数组,打印数据信息
for(int i=;i<rows;i++)
printf("%d\t%s\n",stur[i].stu_id,stur[i].name);

具体demo.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#define MAX 100 //定义一个结构体
typedef struct Student{
int stu_id;
char name[];
} Stu; int main(int argc, char const *argv[]) {
/* code */
// 声明函数
void Write();
void Read(); // 函数调用
Write();
Read(); return ;
} /* 数据写入文件 */
void Write(){
// 定义一个文件指针
FILE *fp ; // 初始化一个结构体数组
Stu stuw[] = {
{, "xiaoming" },
{, "小明"}
} ; // 打开文件,没有文件自动创建
fp = fopen("student.dat","wb"); // b:表示以二进制写入
// 写入数据
fwrite( (char*)stuw,sizeof(Stu),,fp); //2:表示将数组中两个元素写入文件
// 关闭文件
fclose(fp); } // 文件数据读取
void Read(){
// 定义一个文件指针
FILE *fp ;
// 定义一个buf结构体,用于得到文件内容
struct stat buf;
// 定义一个文件行数记录变量
int rows;
// 定义一个Student结构体
Stu stur[MAX]; // 求文件中的行数(记录个数)
stat("student.dat",&buf);
rows = buf.st_size/sizeof(Stu); // 打开文件
fp = fopen("student.dat","rb");
// 读取数据到数组中
fread((char *)stur,sizeof(Stu),rows,fp);
// 关闭文件
fclose(fp); // 遍历数组,打印数据信息
for(int i=;i<rows;i++)
printf("%d\t%s\n",stur[i].stu_id,stur[i].name); }

C语言文件读写(结构体文件)的更多相关文章

  1. C语言博客作业06——结构体&文件

    C语言博客作业06--结构体&文件 1.本章学习总结 1.1思维导图 1.2.本章学习体会 在本周的学习中,我们学习了关于结构体和文件的内容.结构体的本身并不难,但以结构体为基础的链表还是让我 ...

  2. c++ 读写结构体到文件

    可以使用fwrite()将一个结构体写入文件:  fwrite(&some_struct,sizeof somestruct,1,fp);对应的fread函数可以再把它读出来,此处fwrite ...

  3. 使用FileSystem类进行文件读写及查看文件信息

    使用FileSystem类进行文件读写及查看文件信息   在这一节我们要深入了解Hadoop的FileSystem类——这是与与hadoop的文件系统交互的重要接口.虽然我们只是着重于HDFS的实现, ...

  4. C语言中的结构体,结构体数组

    C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存 ...

  5. Go语言基础之结构体

    Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在G ...

  6. 4-17疑难点 c语言之【结构体对齐】

    今天学习了结构体这一章节,了解到了结构体在分配内存的时候采取的是对齐的方式 例如: #include<stdio.h> struct test1 { int a; char b; shor ...

  7. C语言第九讲,结构体

    C语言第九讲,结构体 一丶结构体的定义 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为: struct 结构体名{ 结构体所包含的变量或数组 }; 结构体是一种 ...

  8. C 语言实例 - 使用结构体(struct)

    C 语言实例 - 使用结构体(struct) C 语言实例 C 语言实例 使用结构体(struct)存储学生信息. 实例 #include <stdio.h> struct student ...

  9. Verilog缺少一个复合数据类型,如C语言中的结构体

    https://mp.weixin.qq.com/s/_9UsgUQv-MfLe8nS938cfQ Verilog中的数据类型(Data Type)是分散的,缺少一个复合数据类型:把多个wire, r ...

随机推荐

  1. mysql基础知识详解

    分享一些mysql数据库的基础知识. 1.每个客户端连接都会从服务器进程中分到一个属于它的线程.而该连接的相应查询都都会通过该线程处理.2.服务器会缓存线程.因此并不会为每个新连接创建或者销毁线程.3 ...

  2. atitit.自动生成数据库结构脚本,或者更换数据库,基于hibernate4

    atitit.自动生成数据库结构脚本,或者更换数据库,基于hibernate4 目前近况:: 更换数据库,但是是使用spring集成的. <!-- hibernate配置文件路径 --> ...

  3. 解决:Scanner输入数字总是莫名其妙多个0

    用BufferedInputStream解决 Scanner scanner = new Scanner(new BufferedInputStream(System.in)); System.out ...

  4. 16位结构的CPU,8086给出物理地址的方法

    .16位结构的CPU 概括地讲,16位结构(16位机,字长为16位等常见说法,与16位结构的含义相同)描述了一个CPU具有下面几方面结构特性: 1.运算器一次最多可以处理16位的数据结构 2.寄存器的 ...

  5. hdu1285 确定比赛名次(拓扑排序多种方法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 Problem Description 有N个比赛队(1<=N<=500),编号依次 ...

  6. Linux系统编程--read/write

    . read/write read函数从打开的设备或文件中读取数据. #include <unistd.h> ssize_t read(int fd, void *buf, size_t ...

  7. sqlite3命令读出sqlite3格式的文件内容案例

    /*********************************************************************  * Author  : Samson  * Date   ...

  8. Spring Boot 属性配置&自定义属性配置

    在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring boot中的模块化配置,在pom.xml中依赖的每个Starter都有默认配置,而这些默认配 ...

  9. python手册

    https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

  10. dp + 状态压缩 - Codeforces 580D Kefa and Dishes

    Kefa and Dishes Problem's Link Mean: 菜单上有n道菜,需要点m道.每道菜的美味值为ai. 有k个规则,每个规则:在吃完第xi道菜后接着吃yi可以多获得vi的美味值. ...