文件操作详解(二)

目录

  • 一.文件的顺序读写
    • 1.顺序读写函数(适合于所有的流)
      • 1.1 fgetc(读字符)
      • 1.2 fputc(写字符)
      • 1.3 fgets(读字符串)
      • 1.4 fput(写字符串)
      • 1.5 fscanf(格式化地读)
      • 1.6 fprintf(格式化地写)
    • 2.顺序读写函数(只适用于文件流)
      • 2.1 fread(二进制地读)
      • 2.2 fwrite(二进制地写)
  • 二.scanf、fscanf、sscanf的对比
  • 三.printf、fprintf、sprintf的对比

一.文件的顺序读写

1.顺序读写函数(适合于所有的流)

1.1 fgetc(读字符)

一个字符一个字符地读
在这里插入图片描述
int fgetc(FILE* stream)
从文件中读(拿)字符
参数是文件指针
返回值是字符(转为了ASCII码值)
如果读取成功,返回的是ASCII码值 - char
如果读取错误,返回的是EOF(-1)

如果返回值类型是char,那么返回值肯定不等于-1(EOF),这样就没有返回错误与读到文件末尾了

int main()
{FILE* pf = fopen("test.txt", "r");//以读的形式打开文件if (pf == NULL){perror("fopen");return 1;}//不为NULL,使用char ch = 0;while ((ch = fgetc(pf))!= EOF)//fgetc读一个字符,光标就往下走一个字符//读到文件末尾,返回EOF{printf("%c\n", ch);}fclose(pf);//关闭文件pf = NULL;//文件指针不用了,置为空指针return 0;
}

在这里插入图片描述
在这里插入图片描述

1.2 fputc(写字符)

在这里插入图片描述
int fputc(int character,FILE* stream)
将字符一个一个地写入文件流中
第一个参数是要写入文件中的字符
第二个参数是文件流

int main()
{FILE* pf = fopen("test.txt", "w");if (pf == NULL){perror("fopen");return 1;}for (char i = 'a'; i <= 'z'; i++){fputc(i, pf);//把a到z的字符都写入文件中}fclose(pf);pf = NULL;return 0;
}

在这里插入图片描述

1.3 fgets(读字符串)

char* fgets(char* str,int num,FILE* stream)
第一个参数是从文件流中读出的字符串
第二个参数是重文件流中要读出的字符个数
第三个参数是文件流
如果读取错误或读到文件末尾返回NULL
如果读取成功返回str的起始地址
注意:
fgets会读num-1个字符,最后一位会留给\0(\0是自动放入的)
fgets只读一行,条件允许,把\n也读走

int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}//读char str[20] = "xxxxxxxxxxxxxxx";fgets(str, 10, pf);printf("%s", str);fclose(pf);pf = NULL;return 0;
}


说明最后一位会自动补 \0

int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}//读char str[20] = {0};fgets(str, 10, pf);printf("%s", str);fclose(pf);pf = NULL;return 0;
}

在这里插入图片描述
说明条件允许,把 \n 也读走了

在这里插入图片描述
在这里插入图片描述
说明fgets只读一行

1.4 fput(写字符串)

在这里插入图片描述
int fputs(const char* str,FILE* stream)
将str指向的字符串写入文件流中
如果写入成功返回一个整数
如果写入失败返回EOF
注意:
\n也会被写入文件中
不把\0写入文件中

int main()
{FILE* pf = fopen("test.txt", "w");if (pf == NULL){perror("fopen");return 1;}fputs("abcdef\n", pf);fclose(pf);pf = NULL;return 0;
}

在这里插入图片描述

1.5 fscanf(格式化地读)

int fscanf(FILE* stream,const char* format)
从指定的输入流(文件或键盘等)上读取格式化的数据
第二个参数是格式化的数据

struct s
{int a;char b;char arr[20];
}p;int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}//读fscanf(pf, "%d %c %s", &(p.a), &(p.b), p.arr);//打印到屏幕上fprintf(stdout, "%d %c %s", p.a, p.b, p.arr);//stdout是标准输出流fclose(pf);pf = NULL;return 0;
}

在这里插入图片描述

1.6 fprintf(格式化地写)

int fprintf(FILE* stream,const char* str)
把数据以格式化的形式打印在指定的输出流(屏幕,文件等)上

struct s
{int a;char b;char arr[20];
}p;int main()
{struct s p = { 18,'a',"zhangsan"};FILE* pf = fopen("test.txt", "w");if (pf == NULL){perror("fopen");return 1;}//写fprintf(pf, "%d %c %s",p.a,p.b,p.arr);fclose(pf);pf = NULL;return 0;
}

在这里插入图片描述

2.顺序读写函数(只适用于文件流)

2.1 fread(二进制地读)

size_t fread(const void* str,size_t size,size_t count,FILE* stream);
第一个参数是指向数组的指针
第二个参数是每个元素的大小(以字节为单位)
第三个参数是元素个数

int main()
{FILE* pf = fopen("test.txt", "rb");// wb 以二进制的方式读出if (pf == NULL){perror("fopen");return 1;}//写数据int arr[10] = { 0 };/*fwrite(arr, sizeof(arr[0]), 6, pf);*///以二进制的方式写入fread(arr, sizeof(arr[0]), 6, pf);//以二进制的方式读出for (int i = 0; i < 6; i++){printf("%d ", arr[i]);//打印6个元素}fclose(pf);pf = NULL;return 0;
}

在这里插入图片描述

2.2 fwrite(二进制地写)

size_t fwrite(const void* ptr,size_t size,size_t count,FILE* stream);
第一个参数是指向数组的指针
第二个参数是每个元素的大小(以字节为单位)
第三个参数是元素个数

int main()
{FILE* pf = fopen("test.txt", "wb");// wb 以二进制的方式写入if (pf == NULL){perror("fopen");return 1;}//写数据int arr[] = { 1,2,3,4,5,6 };fwrite(arr, sizeof(arr[0]), 6, pf);//以二进制的方式写入fclose(pf);pf = NULL;return 0;
}

在这里插入图片描述

二.scanf、fscanf、sscanf的对比

scanf – 从标准输入流(键盘)上读取格式化的数据
fscanf – 从指定的输入流(文件或键盘等)上读取格式化的数据
sscanf – 把字符串转为格式化的数据再读取(在字符串中读取格式化的数据)
int sscanf(const char* str,const char* format);

int main()
{struct s p = { 18,'a',"zhangsan" };char buf[200];//写sprintf(buf, "%d %c %s", p.a, p.b, p.arr);//将格式化的数据转为字符串,写入buf中printf("%s\n", buf);//打印字符串bufstruct s t = { 0 };//读sscanf(buf, "%d %c %s", &(t.a), &(t.b), t.arr);//从buf中读(拿)字符串,将字符串转为格式化的数据printf("%d %c %s", t.a, t.b, t.arr);//打印格式化的数据return 0;
}

三.printf、fprintf、sprintf的对比

printf – 把数据以格式化的形式打印在屏幕上
fprintf – 把数据以格式化的形式打印到指定的输出流(例如屏幕,文件等)上
sprintf – 把格式化的数据转为字符串(将格式化数据写入字符串)
int sprintf(char* str,const char* format);

在这里插入图片描述

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

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

相关文章

蓝桥杯嵌入式学习笔记(9):RTC程序设计

目录 前言 1. RTC介绍 2. 使用CubeMx进行源工程配置 3. 代码编程 3.1 准备工作 3.2 进行bsp_rtc.h编写 3.3 进行bsp_rtc.c编写 3.4 main.c编写 3.4.1 头文件引用 3.4.2 变量声明 3.4.3 子函数声明 3.4.4 函数实现 3.4.5 main函数编写 4. 代码实验 5. 总结 前言 因本人备赛蓝…

分布式链路追踪与云原生可观测性

分布式链路追踪系统历史 Dapper, a Large-Scale Distributed Systems Tracing Infrastructure - Google Dapper&#xff0c;大规模分布式系统的跟踪系统大规模分布式系统的跟踪系统&#xff1a;Dapper设计给我们的启示 阿里巴巴鹰眼技术解密 - 周小帆京东云分布式链路追踪在金…

WPS二次开发专题:如何获取应用签名SHA256值

作者持续关注WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 在申请WPS SDK授权版时候需要开发者提供应用包名和签…

Jmeter各组件超详细介绍

1、JMeter和Loadrunner的区别&#xff1f; 2、JMeter如何开发脚本的&#xff1f;强化脚本的技术&#xff1f; 代理服务器录制脚本&#xff0c;Fiddler录制脚本&#xff0c;Badboy录制脚本&#xff0c;根据API&#xff0c;手写脚本&#xff0c;根据抓包&#xff0c;手写脚本。 …

docker版Elasticsearch安装,ik分词器安装,用户名密码配置,kibana安装

1、安装es和ik分词器 创建映射目录并赋予权限&#xff1a; mkdir -p /docker_data/elasticsearch/conf mkdir -p /docker_data/elasticsearch/data mkdir -p /docker_data/elasticsearch/plugins chmod -R 777 /docker_data/elasticsearch编写配置文件&#xff1a; vi /dock…

数据结构—红黑树

红黑树介绍 红黑树&#xff08;Red Black Tree&#xff09;是一种自平衡二叉查找树。由于其自平衡的特性&#xff0c;保证了最坏情形下在 O(logn) 时间复杂度内完成查找、增加、删除等操作&#xff0c;性能表现稳定。 在 JDK 中&#xff0c;TreeMap、TreeSet 以及 JDK1.8 的 …

【C++】C++中的list

一、介绍 官方给的 list的文档介绍 简单来说就是&#xff1a; list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中…

帝国cms自适应html5成语大全/成语查询/成语接龙网站源码整站模板moretag插件带采集

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买!购买本专栏住如有什么源码需要,可向博主私信,第二天即可发布!博主有几万资源) 帝国cms自适应html5成语大全/成语查询…

STM32-04基于HAL库(CubeMX+MDK+Proteus)中断案例(按键中断扫描)

文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式&#xff0c;生成代码四、MDK打开生成项目&#xff0c;编写HAL库的按键检测代码五、运行仿真程序&#xff0c;调试代码 一、功能需求分析 在完成GPIO输入输出案例之后&#xff0c;开始新的功能…

Plonky2.5:在Plonky2中验证Plonky3 proof

1. 引言 Plonky2.5为QED Protocol团队主导的项目&#xff0c;定位为&#xff1a; 在Plonky2 SNARK中验证Plonky3 STARK proof。 从而实现Plonky系列的递归证明。 开源代码实现见&#xff1a; https://github.com/QEDProtocol/plonky2.5https://github.com/Plonky3/Plonky3&a…

【Java核心能力】饿了么一面:Redis 面试连环炮

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

AMRT3D数字孪生引擎

产品概述 AMRT3D引擎是由眸瑞网络科技自主研发、拥有完全自主知识产权的一款全球首款轻量化3D图形引擎&#xff0c;引擎以核心的轻量化技术及AMRT轻量格式为支柱&#xff0c;专为数字孪生项目开发打造。 AMRT3D引擎提供一整套完善的数字孪生解决方案&#xff0c;在数据处理方…

PDF编辑和格式转换工具 Cisdem PDFMaster for Mac

Cisdem PDFMaster for Mac是一款功能强大的PDF编辑和格式转换工具。它为用户提供了直观且易于使用的界面&#xff0c;使常用功能触手可及&#xff0c;从而帮助用户轻松管理、编辑和转换PDF文件。 软件下载&#xff1a;Cisdem PDFMaster for Mac v6.0.0激活版下载 作为一款完整的…

自动化测试如何管理测试数据

前段时间&#xff0c;知识星球里有同学问到&#xff1a;自动化case越多&#xff0c;测试数据越多&#xff0c;数据的管理成本也越来越高&#xff0c;是否需要一个数据池来专门管理测试数据&#xff1f;这是一个好问题&#xff0c;也是很多测试同学在自动化测试实践中必须面对的…

LeetCode-146. LRU 缓存【设计 哈希表 链表 双向链表】

LeetCode-146. LRU 缓存【设计 哈希表 链表 双向链表】 题目描述&#xff1a;解题思路一&#xff1a;双向链表&#xff0c;函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。一张图&#xff1a;知识点__slots__ 解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&am…

JAVAEE之Spring, Spring Boot 和Spring MVC的关系以及区别

1.Spring, Spring Boot 和Spring MVC的关系以及区别 Spring: 简单来说, Spring 是⼀个开发应⽤框架&#xff0c;什么样的框架呢&#xff0c;有这么⼏个标签&#xff1a;轻量级、⼀ 站式、模块化&#xff0c;其⽬的是⽤于简化企业级应⽤程序开发 Spring的主要功能: 管理对象&am…

园区管理(源码+文档)

园区管理系统&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明含有功能项目截图客户端登录页我的退出登录发布详细注意事项公告列表入园记录主页我的资料电梯报修意见反馈客服入园申请注册招商列表 后台管理签到管理公告管理招商管理入园管理反馈报…

大数据毕业设计hadoop+spark旅游推荐系统 旅游可视化系统 地方旅游网站 旅游爬虫 旅游管理系统 计算机毕业设计 机器学习 深度学习 知识图谱

基于hive数据仓库的贵州旅游景点数据分析系统的设计与实现 摘 要 随着旅游业的快速发展和数字化转型&#xff0c;旅游数据的收集和分析变得越来越重要。贵州省作为一个拥有丰富旅游资源的地区&#xff0c;旅游数据的分析对于促进旅游业的发展和提升旅游体验具有重要意义。基…

使用vscode写python项目时的一点小问题

一、工作区怎么切换 首先工作区就是文件夹&#xff0c;所以切换新的工作区就是打开新的文件夹。 方法有二&#xff1a; 1&#xff09;ctrlk ctrlo 或者用2&#xff09;文件-打开文件夹&#xff08;文件在左上角第一个位置&#xff09; 会出现类似的界面&#xff1a; 现在…

WPS二次开发系列:如何获取应用签名SHA256值

在申请WPS SDK授权版时候需要开发者提供应用包名和签名&#xff0c;应用包名好说&#xff0c;那如何生成符合WPS要求的应用签名&#xff08;SHA256)呢&#xff0c;经笔者亲测&#xff0c;有如下两种方式可以实现获取第三方应用签名值&#xff08;SHA256&#xff09; 1. 方法一&…