C语言进阶——sprintf与sscanf、文件的随机读写(fseek、ftell、rewind)

news2024/11/15 17:28:27

目录

sprintf与sscanf

sprintf

sscanf

文件的随机读写 

fseek

ftell

rewind


sprintf与sscanf

与之前学习过的进行对比:

scanf 是针对标准输入的格式化输入语句

printf 是针对标准输出的格式化输出语句

fscanf 是针对所有输入流的格式化语句

fprintf 是针对所有输出流的格式化语句

sprintf 把一个格式化的数据转化成字符串(序列化)

sscanf 从一个字符串中转化成一个格式化的数据 (反序列化)

sprintf

下面的一个示例就是把结构体内部的数据转换成一个字符串: 

#include <stdio.h>
#include <errno.h>

struct S {
	int count;
	float amount;
};

typedef struct S S;

int main()
{
	S s = { 5,20.00 };
	char buf[100] = { 0 };
	sprintf(buf, "%d %f", s.count, s.amount);

	printf("字符串:%s\n", buf);
	printf("格式化:%d %f\n", s.count, s.amount);

	return 0;
}

运行结果为:

sscanf

与sprintf相反,sscanf函数是将字符串转化成格式化的数据

#include <stdio.h>
#include <errno.h>

struct S {
	int count;
	float amount;
};

typedef struct S S;

int main()
{
	S s = { 0 };
	char buf[100] = { "20 50.000" };
	sscanf(buf, "%d %f", &(s.count), &(s.amount));

	printf("字符串:%s\n", buf);
	printf("格式化:%d %f\n", s.count, s.amount);

	return 0;
}

 运行结果也是类似的:


这两个函数的作用是与序列化与反序列化有关的,目前只做简单了解。

文件的随机读写 

fseek

根据文件指针的位置和偏移量来定位文件指针。

fseek函数的偏移量要根据原始位置来确定的,库函数中给出了三个原始位置的定义:

用法示例

文件:

#include <stdio.h>
#include <errno.h>


int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	fseek(pf, 2, SEEK_SET);//打印c
	int ch = fgetc(pf);
	printf("%c\n", ch);

	fseek(pf, 2, SEEK_CUR);//打印f
	ch = fgetc(pf);
	printf("%c\n", ch);

	fseek(pf, -6, SEEK_END);//打印a
	ch = fgetc(pf);
	printf("%c\n", ch);

	fclose(pf);
	pf = NULL;
	return 0;
}

 程序运行结果:

ftell

返回文件指针相对于起始位置的偏移量。

#include <stdio.h>
#include <errno.h>


int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	fseek(pf, 2, SEEK_SET);//打印2
	int pos = ftell(pf);
	printf("%d\n", pos);

	fseek(pf, 2, SEEK_CUR);//打印4
	pos = ftell(pf);
	printf("%d\n", pos);

	fseek(pf, -6, SEEK_END);//打印0
	pos = ftell(pf);
	printf("%d\n", pos);

	fclose(pf);
	pf = NULL;
	return 0;
}

程序运行结果:

rewind

让文件指针的位置回到文件的起始位置。

 经过上面的一系列操作之后,如果找不到原来的文件指针的位置到哪里了,就可以使用这个函数重置文件指针。

#include <stdio.h>
#include <errno.h>


int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	fseek(pf, 2, SEEK_SET);//打印2
	int pos = ftell(pf);
	printf("%d\n", pos);

	fseek(pf, 2, SEEK_CUR);//打印4
	pos = ftell(pf);
	printf("%d\n", pos);

	fseek(pf, -6, SEEK_END);//打印0
	pos = ftell(pf);
	printf("%d\n", pos);

	rewind(pf);
	pos = fgetc(pf);
	printf("%c\n", pos);

	fclose(pf);
	pf = NULL;
	return 0;
}

 程序运行结果:


end


学习自:比特鹏哥——C语言课程

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习Redis(1):Redis内存模型

前言 Redis是目前最火爆的内存数据库之一&#xff0c;通过在内存中读写数据&#xff0c;大大提高了读写速度&#xff0c;可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时&#xff0c;会接触Redis的5种对象类型&#xff08;字符串、哈希、列表、集合、有序集合…

opencv 39 -形态学梯度运算(膨胀图像减腐蚀图像) cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

形态学梯度运算是用图像的膨胀图像减腐蚀图像的操作&#xff0c;该操作可以获取原始图像中前景图像的边缘。 例如&#xff0c;图 8-20 演示了形态学梯度运算。 从图 8-20 中可以看到&#xff0c;形态学梯度运算使用膨胀图像&#xff08;扩张亮度&#xff09;减腐蚀图像&#xf…

怎么把文字转成语音?这两种转换方法轻松转换

在疲劳时阅读变得困难时&#xff0c;可以通过语音听取信息&#xff0c;以减轻眼睛的压力。长时间的阅读可能会对眼睛造成一定的压力&#xff0c;甚至导致疲劳。将文字转换成语音可以让人们在疲劳时听取信息&#xff0c;减轻眼睛的压力&#xff0c;保护视力。怎么把文字转换成语…

Tcp的粘包和半包问题及解决方案

目录 粘包&#xff1a; 半包&#xff1a; 应用进程如何解读字节流&#xff1f;如何解决粘包和半包问题&#xff1f; ①&#xff1a;固定长度 ②&#xff1a;分隔符 ③&#xff1a;固定长度字段存储内容的长度信息 粘包&#xff1a; 一次接收到多个消息&#xff0c;粘包 应…

计算两个日期相差几年几月几天,考虑闰年平年

java8以下 计算两个日期相差几年几月几天&#xff0c;考虑闰年平年 // java 计算两个日期相差几年几月几天&#xff0c;考虑闰年平年public void calculateDifference(String startDade, String endDate) {Calendar calendar1 Calendar.getInstance(); // 第一个日期&#…

vue+Nodejs+Koa搭建前后端系统(八)-- vue router路由嵌套、stroe状态管理

前言 本文是在该系列的基础上&#xff0c;针对前端的修改。其中前端采用vue3框架&#xff0c;脚手架为vite&#xff0c;ui组件库为ElementPlus&#xff0c;路由为vue-router&#xff0c;状态管理库为Pinia。 路由嵌套 整合模块数据文件&#xff08;路由、菜单&#xff09; …

HTB- Sau

HTB- Sau 信息收集立足root 信息收集 访问55555端口&#xff0c;得到Request Baskets。 最底下发现将详细版本暴露了出来。 这有一篇可能的ssrf漏洞文章&#xff08;这个图是postman&#xff09;。 不过似乎没有明白使用方法。在最上面还有几个功能没有尝试过。 在Settings上…

k8s之Helm安装

一、最快安装–官网提供的脚本–默认获取最新版本 cd /usr/local/src/ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.shhelm search hub wordpresssource <(helm completion bash) h…

思迈特CEO吴华夫:大模型加持下的ABI平台,彻底解决指标平台与BI的割裂之痛丨数据猿专访...

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 在现代商业环境中&#xff0c;企业的业务需求日趋复杂&#xff0c;对数据分析的依赖也越来越深。从实时销售情况到市场趋势分析&#xff0c;从客户行为研究到产品优化调整&#xff0c;每一个环节都离不开数据的支撑。然而&a…

vue3.0 bpmn-js + TS 简易教程

前言 bpmn.js是一个BPMN2.0渲染工具包和web建模器, 使得画流程图的功能在前端来完成. 这里主要记录本人在开发bpmn中的流程 参照了 LinDaiDai_霖呆呆 大佬的文档 实战 安装 bpmn npm install --save bpmn-jsHTML <template><div class"designer-container&quo…

【深度学习】Collage Diffusion,拼接扩散,论文,实战

论文&#xff1a;https://arxiv.org/abs/2303.00262 代码&#xff1a;https://github.com/VSAnimator/collage-diffusion 文章目录 AbstractIntroductionProblem Definition and Goals论文其他内容实战 Abstract 基于文本条件的扩散模型能够生成高质量、多样化的图像。然而&a…

WEB集群——tomcat

1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用。 一、简述静态网页和动态网页的区别 &#xff08;1&#xff09;静态网页 1.什么是静态网页 请求响应信息&#xff0c;发…

解码产品经理:深度剖析这个角色的五大职责

了解产品经理的角色 在一个组织中&#xff0c;产品经理的角色是至关重要的。他们不仅需要理解市场动态和用户需求&#xff0c;还需要将这些信息转化为实际的产品策略和行动计划。产品经理在团队中的地位是核心的&#xff0c;他们需要协调各个部门&#xff0c;包括开发、设计、…

可缝合神经网络

文章目录 Stitchable Neural Networks摘要本文方法实验结果 Stitchable Neural Networks 摘要 包含大量强大的预训练模型族(如ResNet/DeiT)的model zoo已经达到了前所未有的范围&#xff0c;这对深度学习的成功有重要贡献。由于每个模型族都由具有不同尺度的预训练模型(例如&…

W5100S-EVB-PICO做DNS Client进行域名解析(四)

前言 在上一章节中我们用W5100S-EVB-PICO通过dhcp获取ip地址&#xff08;网关&#xff0c;子网掩码&#xff0c;dns服务器&#xff09;等信息&#xff0c;给我们的开发板配置网络信息&#xff0c;成功的接入网络中&#xff0c;那么本章将教大家如何让我们的开发板进行DNS域名解…

ModaHub魔搭社区——阿里云通义千问宣布开源!70亿参数模型上线魔搭社区,免费可商用

通义千问开源!8月3日,AI模型社区魔搭ModaHub上架两款开源模型Qwen-7B和Qwen-7B-Chat,阿里云确认其为通义千问70亿参数通用模型和对话模型,两款模型均开源、免费、可商用。在多个权威测评中,通义千问7B模型取得了远超国内外同等尺寸模型的效果,成为当下业界最强的中英文7B…

月报总结|Moonbeam 7月份大事一览

炎炎夏日&#xff0c;Moonbeam于越南举办了线下交流会&#xff0c;在EthCC 2023和以太坊社区成员共同讨论多链应用&#xff0c;在Polkadot Decoded中分享了Moonbeam的与众不同之处。 Bear Necessities Hackathon也于本月圆满结束&#xff0c;选出了每个赛道最杰出的项目&#…

记一次公众号-cs客户端捡漏

声明&#xff1a;文中涉及到的技术和工具&#xff0c;仅供学习使用&#xff0c;禁止从事任何非法活动&#xff0c;如因此造成的直接或间接损失&#xff0c;均由使用者自行承担责任。 点点关注不迷路&#xff0c;每周不定时持续分享各种干货。 原文链接&#xff1a;众亦信安&a…

load、unload和pagehide、pageshow

一、load、unload和pagehide、pageshow的主要应用 1&#xff09;load 和 unload 事件监听web页面的进入和离开&#xff0c;一般用于页面的首次加载、刷新和关闭等操作的监听&#xff1b; 2&#xff09;pageshow 和 pagehide 事件多用于监听浏览器的前进和后退等。 二、pagesh…

第3集丨Vue 江湖 —— Vue中的事件

目录 一、Vue中事件使用二、事件修饰符2.1 prevent2.2 stop2.3 once2.4 capture2.5 self2.6 passive2.7 修饰符连续写2.8 整合案例 三、键盘事件3.1 Vue 中常用的按键别名3.2 key值绑定3.3 系统修饰符键3.4 keyCode绑定3.5 自定义别名3.6 组合键3.7 案例整合 一、Vue中事件使用…