前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据。但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写。这种读写方式称为随机读写,也就是说从文件的任意位置开始读写。

实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。

文件定位函数rewind和fseek

移动文件内部位置指针的函数主要有两个,即 rewind() 和 fseek()。

rewind() 用来将位置指针移动到文件开头,前面已经多次使用过,它的原型为:

void rewind ( FILE *fp );

fseek() 用来将位置指针移动到任意位置,它的原型为:

int fseek ( FILE *fp, long offset, int origin );

参数说明:

1) fp 为文件指针,也就是被移动的文件。

2) offset 为偏移量,也就是要移动的字节数。之所以为 long 类型,是希望移动的范围更大,能处理的文件更大。

3) origin 为起始位置,也就是从何处开始计算偏移量。C语言规定的起始位置有三种,分别为文件开头、当前位置和文件末尾,

每个位置都用对应的常量来表示:

起始点

常量名

常量值

文件开头

SEEK_SET

0

当前位置

SEEK_CUR

1

文件末尾

SEEK_END

2

例如,把位置指针移动到离文件开头100个字节处:

fseek(fp, 100, 0);

值得说明的是,fseek() 一般用于二进制文件,在文本文件中由于要进行转换,计算的位置有时会出错。

文件的随机读写

在移动位置指针之后,就可以用前面介绍的任何一种读写函数进行读写了。由于是二进制文件,因此常用 fread() 和 fwrite() 读写。

【示例】从键盘输入三组学生信息,保存到文件中,然后读取第二个学生的信息。

#include

#define N 3

struct stu{

char name[10]; //姓名

int num; //学号

int age; //年龄

float score; //成绩

}boys[N], boy, *pboys;

int main(){

FILE *fp;

int i;

pboys = boys;

if( (fp=fopen("d:\\demo.txt", "wb+")) == NULL ){

printf("Cannot open file, press any key to exit!\n");

getch();

exit(1);

}

printf("Input data:\n");

for(i=0; i

scanf("%s %d %d %f", pboys->name, &pboys->num, &pboys->age, &pboys->score);

}

fwrite(boys, sizeof(struct stu), N, fp); //写入三条学生信息

fseek(fp, sizeof(struct stu), SEEK_SET); //移动位置指针

fread(&boy, sizeof(struct stu), 1, fp); //读取一条学生信息

printf("%s %d %d %f\n", boy.name, boy.num, boy.age, boy.score);

fclose(fp);

return 0;

}

运行结果:

Input data:

Tom 2 15 90.5↙

Hua 1 14 99↙

Zhao 10 16 95.5↙

Hua  1  14 99.000000

以上就是对 C语言 文件随机读写的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

c语言生成随机坐标,C语言 文件的随机读写详解及示例代码相关推荐

  1. c语言 freopen txt_C语言文件操作函数freopen详解

    C语言文件操作函数freopen详解 今天做USACO 用到了文件的操作. 之前做USACO只是格式化的.些 写 freopen("xxx.in","r",st ...

  2. c语言生成随机的坐标,C语言文件的随机读写

    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  3. C语言abs和labs函数详解和示例

    文章目录 1.包含头文件 2.函数声明 3.功能说明 4.示例 5.其它说明 6.获取视频教程 7.版权声明 C语言提供了一系列函数获取整数的绝对值:abs.labs.llabs. 1.包含头文件 # ...

  4. 用c语言简单实现通讯录(详解和具体代码)

    前言 一.明确通讯录的功能 1.查找通讯录上的姓名.性别.电话和住址 2.可以增加.删除或修改相关信息 二.如何实现通讯录的功能 1.使用struct函数 2.实现通讯录的步骤 (1)初始化通讯录并打 ...

  5. C语言-哈希查找(HASH)-详解(完整代码)

    目录 原理: 实例解释 存储逻辑图 需要的知识: 附加 完整代码 代码详解 执行结果 1.查找个不存在的 2.查找个存在的 原理: 用一个指针数组,来存储 每个链表的头节点 的首地址 如果要从 'NU ...

  6. C语言文件的随机读写

    C语言文件的随机读写 文件顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  7. 坐标移动c语言,C语言 坐标移动详解及实例代码

    搜索热词 题目描述 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动.从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面. ...

  8. c语言 read 文件字节没超过数组大小时会怎样_剑指信奥 | C 语言之信奥试题详解(四)...

    趣乐博思剑指信奥系列 ❝ 趣乐博思剑指信奥系列,专门针对全国青少年信息学奥林匹克联赛 NOIP 而开展的专业教育方案.开设的课程有 C 语言基础,C++ 语言基础,算法设计入门与进阶,经典试题分析与详 ...

  9. 【C语言】扫雷小游戏详解

    [C语言]扫雷小游戏详解 前言: 还记得大明湖畔的夏雨荷,电脑课上的扫雷吗? ---------------------------是 他 吗--------------------------- 没 ...

最新文章

  1. ECMAScript 5 —— 单体内置对象之Math对象
  2. python中sorted()函数的用法
  3. 网页脚本基本java语法_JSP 基础语法
  4. android在Service中弹出Dialog对话框,即全局性对话框
  5. SpringBoot 中添加jsp支持遇到的问题
  6. 2纳米芯片问世!芯片性能要起飞?!
  7. linux分配内核,linux 内核分配算法
  8. 关于JS中apply和call详细解答
  9. JavaSE基础——代码块、继承、方法重写和final关键字
  10. 智慧水利大屏可视化决策系统
  11. 国内知名的java商城系统排名
  12. LayaBox2D使用自定义Shader的方法
  13. 微信小程序申请微信支付0.2费率商户号微信小程序接入开通流程
  14. 一元二次方程组的简单解法
  15. 用计算机怎么计算税率表,个税计算器2016年税率表公式
  16. 把酒言欢话聊天,基于Vue3.0+Tornado6.1+Redis发布订阅(pubsub)模式打造异步非阻塞(aioredis)实时(websocket)通信聊天系统
  17. 动态规划——钢条切割
  18. 如何使用python读取modbus/TCP协议数据
  19. 在痛苦的日子里笑出声来
  20. Transformer + RL:是强化学习魔高一尺,还是 Transformer 道高一丈? (1)

热门文章

  1. 设计模式(四)简单工厂模式
  2. 行如风 Angular 初识3
  3. 知道这20个正则表达式,能让你少写1,000行代码
  4. 使用组策略实现文件复制
  5. 承接iPhone,iPad开发外包(长期承接IPhone,IPad项目外包)
  6. 通过ArcCatalog连接ArcGIS Server的种种问题
  7. NETMerger - DotNet 组件(dll或exe)合并
  8. 极客大赛助力BCH应用开发
  9. 状态管理框架开发不完全指南
  10. VS2005相关----整理起始页面板