有时候,我们需要将输入的数据存储起来,这时候就需要用到文件,对于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. 应用SVN比较文件定位修改

    用SVN checkout一个版A本到一个目录中,再从别的地方找到版本B复制到版本A所在的目录中,选择复制和替换,再要比较的文件上右键-->SVN-->diff

  2. 我的高效编程的秘诀--开发环境的重要性(IOS)

    我觉得一个好的开发环境,能够让一个开发者的工作效率提高两倍以上,也能够让一个小白看上去不那么蠢: 开发环境不是仅仅安装一个xcode这种ide就OK了,在我看来开发环境的部署范围比較广泛,以下我来说说 ...

  3. Android Bitmap和Canvas学习笔记

    位图是我们开发中最常用的资源,毕竟一个漂亮的界面对用户是最有吸引力的. 1. 从资源中获取位图 可以使用BitmapDrawable或者BitmapFactory来获取资源中的位图. 当然,首先需要获 ...

  4. (2)FluidMoveBehavior 之单击 Grid 中 Tile 进行排序

    在上一篇文章中,使用 FluidMoveBehavior 结合 FluidMoveSetTagBehavior 可以使数据从 ListBox 中的 数据显示时,产生缓慢的动画,从而更加生动.其实 Fl ...

  5. js基本知识4

    1. 数组 看电影 电影院 座位 大的变量 里面可以放很多的值 var arr = [1,3,57]; var ar = new Array(); new object(); new Date() v ...

  6. [C++]在什么时候需要“#include string.h“

    相关资料:https://zhidao.baidu.com/question/515578726.html C++中,string头文件基本上已经包含在iostream中了.但是,平时使用的时候建议加 ...

  7. am335x 无屏实现开关机程序

    因测试需要加入开机次数记录,所以记录一下7816开关机是怎么做的 原理很简单,开机时判断一个记录文件是否存在,如果存在,运行一段代码,将记录开机次数文件的值读出来+1 代码如下: #include & ...

  8. 解决Error:Android Dex: com.android.dex.DexIndexOverflowException: Cannot merge new index 65918 into a

    错误:Error:Android Dex: com.android.dex.DexIndexOverflowException: Cannot merge new index 65918 into a ...

  9. OSX活动监视器关闭spotlight 、mds_stores等进程

    如果是机械盘,spotlight .mds_stores严重影响使用体验 今天早上一开机,设备速度慢的受不了,随便打开一个应用都几分钟.通过top查看,CPU剩余90%以上.所以并不是CPU不足导致. ...

  10. 利用WordPress用户密码算法规则修改用户密码

    WordPress用户密码保存在wp_users数据表的user_pass字段,密码是通过Portable PHP password hashing framework类产生的, 密码的形式是随机且不 ...