有时候,我们需要将输入的数据存储起来,这时候就需要用到文件,对于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. vim资源帖

    vimscript教程 http://learnvimscriptthehardway.stevelosh.com/ 阿信的vimscript http://www.axiaoxin.com/arti ...

  2. linux性能不好怎么办?对着清单撸一遍

    性能不好怎么办?对着清单撸一遍 Brendan Gregg是Netflix的资深性能架构师,著名性能调优专家.著有<性能之巅:洞悉系统.企业与云计算>)一书,可以说是性能调优领域的集大成之 ...

  3. dependent-name ‘xxx::yyy’ is parsed as a non-type, but instantiation yields a type

    简言之,就是说你该用typename的地方没用typename,如以下代码 template<class Cont> void frontInsertion(Cont& ci) { ...

  4. Log4j容器深入探究

    1.思考 容器是什么? 水壶是容器,水壶中存放着水,等我们需要水了,直接用 Spring中的ApplicationContext是容器,里面存放着各种Bean,等我们需要了直接用,并且可以创建管理Be ...

  5. ubuntu4arm 网站参考

     1 构建ubuntu armv7文件系统:基于tiny210v2 http://blog.csdn.net/embbnux/article/details/12751465 2制作BeagleBon ...

  6. 用Netty开发中间件:高并发性能优化(转)

    用Netty开发中间件:高并发性能优化 最近在写一个后台中间件的原型,主要是做消息的分发和透传.因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本.Net ...

  7. 你所不知道的JSON

    译者按: 老司机们,你知道JSON.stringify还有第二个和第三个可选参数吗?它们是什么呢? JSON已经逐渐替代XML被全世界的开发者广泛使用.本文深入讲解JavaScript中使用JSON. ...

  8. ubuntu samba 安装

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,是一种在局域网上共享文件和打印机的一种通信协议. 1. 安装 sudo apt-get install samba samba-c ...

  9. mybatis 的动态sql语句是基于OGNL表达式的。

    mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...

  10. 【BZOJ】1647: [Usaco2007 Open]Fliptile 翻格子游戏(暴力)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1647 自己太弱...看题解.. 竟然是枚举第一行的放法,,,因为一定要全部变0,所以将前一行1的在这 ...