【文件 part 6 - 格式化读写文件函数 随机读写】

格式化读写文件函数

/* 函数调用:  */
fprintf ( 文件指针,格式字符串,输出表列);
fscanf ( 文件指针,格式字符串,输入表列);

/** 函数功能:
 *  	从磁盘文件中读入或输出字符
 * fprintf 和printf函数类似:
 *		printf是将数据输出到屏幕上(标准输出),
 *		fprintf函数是将数据输出到文件指针所指定的文件中。
 *
 * fscanf和scanf 函数类似:
 *		scanf是从键盘(标准输入)获取输入,
 *		fscanf是从文件指针所标示的文件中获取输入。
 */
#include <stdio.h>

int main(int argc, char *argv[])
{
	FILE *fp;
	char ch1 = 'a', ch2;
	int num1 = 50, num2;
	char string1[20] = "hello", string2[20];
	float score1 = 85.5, score2;

	if((fp = fopen("C:/Users/lzx/Desktop/file.txt","w+"))==NULL)
	{
		printf("fail to fopen\n");
		return1;
	}

	//使用fprintf向文件写入字符串
	fprintf(fp,"%c %d %s %f\n",ch1,num1,string1,score1);

	rewind(fp);

	//使用fscanf获取文件内容
	fscanf(fp,"%c %d %s %f\n",&ch2,&num2,&string2,&score2);
	printf("%c %d %s %f\n",ch2,num2,string2,score2);

	fclose(fp);
	return 0;
}

执行结果
在这里插入图片描述
在这里插入图片描述

随机读写

前面介绍的对文件的读写方式都是顺序读写,即读写文件只能从头开始,顺序读写各个数据;但在实际问题中常要求只读写文件中某一指定的部分,例如:读取文件第200–300个字节。为了解决这个问题可以移动文件内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。

rewind

#include <stdio.h>
void rewind(FILE *stream);
/* 功能:将文件位置定位到起始位置
 * 参数:
 * 	stream:文件指针
 * 返回值:无
 * /

ftell

#include <stdio.h>
long ftell(FILE *stream);
/* 功能:获取当前文件的偏移量
 * 参数:
 * 	stream:文件指针
 * 返回值:
 * 	获取当前文件的偏移量
 * /

fseek

#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
/* 功能:设置文件位置指针的偏移量
 * 参数:
 * 		stream:文件指针
 * 		offset:偏移量
 * 				可正可负也可为0
 * 		whence:相对位置
 * 		SEEK_SET 文件起始位置
 * 		SEEK_CUR 文件当前位置
 * 		SEEK_END 文件末尾位置(最后一个字符后面一个位置)
 * 返回值:
 * 		成功:0
 * 		失败:‐1
 */ 		
rewind(fp) <==> fseek(fp, 0, SEEK_SET);
#include <stdio.h>

int main(int argc, char *argv[])
{
	FILE *fp;
	if((fp = fopen("C:/Users/lzx/Desktop/file.txt","w+"))==NULL)
	{
		printf("fail to fopen\n");
		return1;
	}

	fputs("123456789\n", fp);
	fputs("abcdefghijklmn", fp);

	//获取当前文件指针的读写位置
	printf("offset = %ld\n", ftell(fp));
	
	//将当前文件的读写文件设置到文件的起始位置
	//rewind(fp);
	//fseek(fp, 0, SEEK_SET);

	//将当前文件的读写位置设置为倒数第五个位置
	fseek(fp,5, SEEK_END);

	char buf[32] = "";
	while(fgets(buf, 32, fp) != NULL)
	{
		printf("[%s]\n", buf);
	}

	return 0;
}

执行结果
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/34651.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP从入门到放弃系列之生产订单结算

文章目录概览 一、概述二、结算的模式2.1、订单相关的成本归集2.2、产品相关的成本归集 最后 一、概述 当生产从计划到订单&#xff0c;生产领料、投料、报工、入库整个生产流程完成后&#xff0c;生产订单中会产生对应的财务数据&#xff0c;或者说借贷项数据&#xff08;材料…

npm启动,node.js版本过高

“dev_t”: “set NODE_OPTIONS”–openssl-legacy-provider" & npm run dev\n"

Ubuntu安装碰撞检测库FCL以及前置依赖libccd, OctoMap

Ubuntu安装碰撞检测库FCL以及前置依赖libccd, OctoMap 大致安装流程见FCL github地址&#xff0c;但是在安装libccd时存在一些问题。 建议完整浏览后再进行安装 1.编译libccd的报错 首先FCL页面已经说明libccd要直接克隆源码&#xff0c;不要下载压缩包。 其次&#xff0c;在…

MAYA传送带上放石头(新旧粒子系统)

播放试试 使用老的粒子系统 particleShape1.shuliangrand(0,5); particleShape1.daxiao<<rand(0.2,0.5),rand(0.2,0.5),rand(0.2,0.5)>>; particleShape1.xuanzhuan<<rand(360),rand(360),rand(360)>>; 使用新的粒子系统 粒子向后滑落 新粒子系统能进行…

SSMP整合案例(11) 在界面中实现添加操作

上文 SSMP整合案例(10) vue端调整项目环境 发送请求 基本界面编写我们搭建了基本的页面结构 然后 我们来做个新增的功能 首先 新增 我们肯定是用户点击了这个新建之后 我们再来处理这个逻辑 我们之前的代码 新增是有绑定 一个事件的 但是这个 AddBook中并没有内容 首先 我们…

4.44ue4:相机抖动

1.创建相机抖动类 右键内容面板&#xff0c;点击创建蓝图类&#xff0c;搜索shake&#xff08;camera shake&#xff09; 2.使用相机抖动&#xff1a; 节点&#xff1a;play world .. api解释&#xff1a; epicenter&#xff1a;震源 inner Radius&#xff1a;内圈范围&a…

【梦辛工作室】java实现简易消息队列处理器 可分区 分区顺序消费MxMQ

大家好哇&#xff0c;又是我&#xff0c;梦辛工作室的灵&#xff0c;最近在巩固JUC并发包&#xff0c;突然想到如果自己的应用体量不大&#xff0c;但有需要消息队列来实现应用解耦和削峰来缓解服务器突增压力&#xff0c;比如抢票时&#xff0c;突然有比较用户同时抢票&#x…

分布式运用——rsync远程同步

分布式运用——rsync远程同步 一、rsync的背景和原理1.rsync的功能2.rsync的应用场景3.使用rsync的基本命令4.scp与rsync的区别 二、配置rsync源服务器1.关闭防火墙2.建立/etc/rsyncd.conf 配置文件3.保证所有用户对源目录/var/www/html 都有读取权限4.启动 rsync 服务程序5.关…

flutter3.7版本下使用flutter boost解决使用platview崩溃或异常问题

背景 工程使用了混合开发&#xff0c;使用flutter boost插件&#xff0c;flutter 的activity1 frament1 跳转activity2 frament2&#xff0c;frament1 包含platformView&#xff0c;按照上面老哥解决崩溃问题的基础上&#xff0c;出现activity2 frament2返回activity1 framen…

“未来之光:揭秘创新科技下的挂灯魅力“

写在前面&#xff1a; 高度信息化当下时代&#xff0c;对电脑及数字设备的需求与日俱增无处不在&#xff0c;随之而来的视觉疲劳和眼睛问题也攀升到了前所未有的高度。传统台灯对于长时间使用电脑的人群来说是完全无法解决这些问题的。一款ScreenBar Halo 屏幕挂灯&#xff0c;…

数学建模——插值(下)

本文是面向数学建模准备的&#xff0c;是介绍性文章&#xff0c;没有过多关于原理的说明&#xff01;&#xff01;&#xff01; 目录 一、2维插值原理及公式 1、二维插值问题 2、最邻近插值 3、分片线性插值 4、双线性插值 5、二维样条插值 二、二维插值及其Matlab工具箱…

微信小程序

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版&#xff0c;配图更多&#xff0c;CSDN博文图片需要手动上传&#xff0c;因此文章配图较少&#xff0c;看不懂的可以去菜鸡博客参考一下配图&#xff01; 系列文章目录 前端系列文章——传送门 后端系列文章——传送…

opencv使用applyColorMap()函数,可以将灰度图或彩色图转换成自定义的彩色图,或opencv提供的20多种色彩值

文章目录 1、applyColorMap()函数的使用&#xff1a;&#xff08;1&#xff09;函数原型&#xff1a;void applyColorMap(InputArray src, OutputArray dst, int colormap)void applyColorMap(InputArray src, OutputArray dst, InputArray userColor) &#xff08;2&#xff0…

利用Python构建宁德时代、比亚迪、隆基绿能股票时间序列预测模型

存货 import tushare as ts # 导包 import numpy as np import matplotlib.pyplot as plt from scipy.signal import find_peaks from scipy.stats import norm import datetime import pandas as pd import seaborn as sns # pip install seaborn import matplotlib.patches …

WideNet:让网络更宽而不是更深

这是新加坡国立大学在2022 aaai发布的一篇论文。WideNet是一种参数有效的框架&#xff0c;它的方向是更宽而不是更深。通过混合专家(MoE)代替前馈网络(FFN)&#xff0c;使模型沿宽度缩放。使用单独LN用于转换各种语义表示&#xff0c;而不是共享权重。 混合专家(MoEs) 条件计…

数通王国历险记之TCP协议下的三大协议的验证实验

系列文章目录 数通王国历险记&#xff08;1&#xff09; 前言 一&#xff0c;我们要先知道PDU是什么&#xff1f; 二、TCP协议下的三大协议的验证实验 1.FTP的验证实验 1&#xff0c;拓扑图 2.将lsw4配置一下 3&#xff0c;FTP服务器端开启FTP服务&#xff1a; 4&#x…

LIN诊断实现MCU本地OTA升级

一、目标 通过PC端上位机实现MCU本地的OTA升级,本篇文章对实现的目的、需要用到的第三方工具、LIN诊断帧、升级协议、MCU端升级过程以及PC端升级过程做详细说明。 二、目的 最近在做MCU项目时需要将样机寄给客户进行验证,在客户的验证过程中要求参数可调试,如果需要修改软…

vue下基于elementui自定义表单-后端数据设计篇

vue下基于elementui自定义表单-后端篇 自定义表单目前数据表单设计是基于数据量不大的信息单据场景&#xff0c;因为不考虑数据量带来的影响。 数据表有: 1.表单模版表&#xff0c;2.表单实例表&#xff0c;3.表单实例项明细表&#xff0c;4表单审批设计绑定表 以FormJson存…

RuoYi(分离版) 使用代码生成器添加子模块(idea版)

右键总文件夹&#xff0c;选择新模块添加新模块 新建的业务模块 新建的业务模块中添加若依通用模块工具 <dependencies><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common</artifactId></dependency></depen…

【Thunder送书 | 第三期 】「Python系列丛书」

文章目录 前言《Python高效编程——基于Rust语言》《Python从入门到精通》《Python Web深度学习》《Python分布式机器学习》文末福利 | 赠书活动 前言 Thunder送书第三期开始啦&#xff01;前面两期都是以【文末送书】的形式开展&#xff0c;本期将赠送Python系列丛书&#xff…