C语言|文件读写,代码运行后留下“记忆”
前言
对于一个代码,运行时可能需要保留产生的结果,例如计算值,筛选值,记录点或者小游戏的得分,而正常情况下我们要保存一个数据,想到的肯定是打开我们的文本软件,手撸文字,今天这篇文章,带你一起,教代码写下它的“记忆”

了解文件本质
对于文本文件和二进制文件,其实都是代表了一系列的字节,C语言提供了底层调用来处理存储设备上的文件,而从一个C语言程序中移出字节,这种字节流就叫做数据流
数据流(data stream)是一组有序,有起点和终点的字节的数据序列。包括输入流和输出流。
文件读写
在需要创建或者要打开一个文件时,我们就可以使用fopen()函数,而关闭文件则需使用fclose()函数
创建或者打开时会初始化类型FILE的一个对象,格式:
FILE *fopen( const char *filename, const char *mode );
其中filename是文件的命名,而mode是打开的模式,制作了一个表格方便查阅
mode(模式) | 功能 |
r | 以只读的形式打开一个已有的文本文件,允许读取文件(不存在则出错) |
w | 以写入的形式打开文本文件,不存在,则创建新文件,反之,则从文件起始位置写,覆盖原内容 |
a | 以追加模式打开文本文件,不存在,则创建,会在已有文件的内容后边追加内容,不会覆盖原有内容 |
r+ | 以读写的形式打开文本文件,从头开始读,新数据写入只覆盖所占的空间 |
w+ | 创建一个新文件,进行写入,从头开始读,文件存在的话原内容全部消失,不存在则创建新文件 |
a+ | 可以和a一样追加内容,同时从头开始读 |
wb | 只写模式打开二进制文件 |
rb | 只读模式打开二进制文件 |
ab | 追加模式打开二进制文件 |
rb+ | 读写打开一个二进制文件,只允许读写数据。 |
rt+ | 读写打开一个文本文件,允许读和写。 |
wb+ | 读写打开或建立一个二进制文件,允许读和写。 |
wt+ | 读写打开或着建立一个文本文件;允许读写。 |
at+ | 读写打开一个文本文件,允许读或在文本末追加数据。 |
ab+ | 读写打开一个二进制文件,允许读或在文件末追加数据。 |
处理二进制文件还可用 r+b,w+b,a+b等 |
以上面的格式为例,打开或者创建一个文本文件,然后再关闭
int main()
{FILE* zh;f = fopen("word.txt", "w"); //格式例子if (zh != NULL){fputs("fopen example", zh);fclose(zh);zh=NULL;}return 0;
}
如果成功关闭文件,fclose( ) 函数返回零,如果关闭文件时发生错误,函数返回 EOF。这个函数实际上,会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。
EOF 是一个定义在头文件 stdio.h 中的常量。
C 标准库提供了各种函数来按字符或者以固定长度字符串的形式读写文件。
学会了文件的打开模式后,我们就开始书写代码的“记忆”
文件的读写函数
fgetc():读取一个字符
fputc():写入一个字符
fgets():读取一个字符串
fputs():写入一个字符串
fprintf():写入格式化数据
fscanf():格式化读取数据
fread():读取数据
fwrite():写入数据
我们可以先小试牛刀
试着写入字符进一个txt文件里
第一步:先在一个地方创建文件夹(方便存储产生的文件,这里以C盘为例,我创建了一个名为tmp的文件夹)

第二步:敲入我们的代码
#include <stdio.h>
int main(){FILE *fp = NULL; //FILE *fp 是声明,声明fp是指针,用来指向FILE类型的对象。fp = fopen("C:/tmp/1.txt","w+"); /*fopen,以w+允许读写的模式打开路径上的1.txt文件此时没有1.txt文件,则自动新建*/char c = 'c';fputc(c,fp);fprintf(fp,"\n");fprintf(fp,"This is testing for fprintf...\n");fputs("This is testing for fputs...\n",fp);fclose(fp);
}
看我们的第五行代码,因为tmp文件夹是新建的,所以里面没有文件,此时我们运行代码后,文件夹里就自动生成了1.txt文件
然后使用了fputc()输入单个字符,fprintf()和fputs()写入了两行字符串
当字符多于一个时,fputc()就会报错
我们先看刚刚运行代码后的结果


此时txt文件中就出现了我们想要的字符
如何实现回应键盘效果,将键盘上输入的字符都写入文件中,实现打字效果呢?
这里我们就可以写一个while循环体,运用getchar()每次都从键盘读取一个字符存进遍历中,然后写入文件
运用键盘往文件里写入字符(实现打字效果)
#include<stdio.h>
int main(){FILE *fp;char ch;fp=fopen("C:/tmp/2.txt","wt+");printf("输入一段字符串,回车代表终止\n");while((ch=getchar())!='\n'){fputc(ch,fp); //可以输入中文喔}fclose(fp);return 0;
}
此时我们尝试一下运行,输入:

结果:

就是这么的神奇
接下来我们还可以进行一些有趣的功能
读取”记忆“
实现统计文章某个字出现频率
对于一个不需要写入的文本,我们就以r只读的方式来打开它
如果打不开,给出错误提示
运用fgetc()读取字符,通过while循环重复操作,直到无法读取到字符为止(即读完文章最后一个字符)
#include <stdio.h>
int main ()
{FILE * fp;int ch;int n = 0;fp = fopen ("C:/tmp/myfile.txt", "r");if (fp == NULL) perror ("无法打开此文件"); // 打开失败else{while (ch != EOF){ch = fgetc (fp); // 获取一个字符if (ch == 'a') n++; // 统计美元符号 'a' 在文件中出现的次数}fclose (fp); // 一定记得要关闭文件printf ("a的个数为%d个。\n",n);}return 0;
}
我们预存一个文件,内容有这些

接下来我们执行上面的代码,十分简单地就把这段乱码中的”a“成员给揪出来了

相关文章:

C语言|文件读写,代码运行后留下“记忆”
前言对于一个代码,运行时可能需要保留产生的结果,例如计算值,筛选值,记录点或者小游戏的得分,而正常情况下我们要保存一个数据,想到的肯定是打开我们的文本软件,手撸文字,今天这篇文…...

【2023unity游戏制作-mango的冒险】-6.关卡设计
👨💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:unity游戏制作 ⭐mango的冒险关卡设计⭐ 文章目录⭐mango的冒险关卡设计⭐👨&#…...

JavaScript高级 浏览器WebStorage
WebStorage主要提供了一种机制,可以让浏览器提供一种比cookie更直观的key、value存储方式: localStorage:本地存储,提供的是一种永久性的存储方法,在关闭掉网页重新打开时,存储的内容依然保留; …...

$ 3 :类型强制转换场景、printf函数
1、类型强制转换场景 #include <stdio.h> //强制类型转换 int main() {int i=5;float j=i/2;float k=(float)i/2;printf("%f\n",j);printf("%fln",k);return 0;} j得到的值为2,k得到的值是2.5,因为当我们整数做除法时,默认进行整除,要得到小数,…...

视频会议系统异常中断故障分析案例
1. 背景 某电气化局的用户反馈,近期视频系统在使用过程中出现频繁中断的情况,这种情况影响到用户的视频体验和工作效率。 针对此问题,我们将NetInside流量分析系统部署到电气化局机房,使用流量分析系统提供实时和历史原始流量。…...

什么是文件传输中台?
企业文件传输的场景有哪些? 企业日常办公中无时无刻不在产生数据文件。多样化的数据已成为企业的重要资产,更被称为是“新石油”。数据并不是单单存储起来就行了,而是需要高效又安全的让数据流转起来,释放其自身的价值࿰…...

设计模式-代理模式(Java)
本篇文章详细说明代理模式并用代码简单介绍代理模式的用法,以及代理模式在实际应用中的源码简单解析。 1、什么是代理模式和代码实现 代理模式是一种设计模式,它允许在不改变原有类的情况下,为其提供一种代理机制,用于控制其访问…...

如何处理负面评论?利用负面评论发挥优势
每家公司都应该做的一件事:回复评论! 37%的买家积极考虑对评论的回应,以评估和对品牌的看法。所以不要忘记回复评论! 如何处理负面评论 如果您的公司正在经历大量负面评论,请了解您的产品团队如何利用它们来发挥自己的…...

一个JAVA程序员必备的技能有哪些?知道这些帮你快速升职加薪
和其他行业一样,软件研发行业也有必须要掌握的工具,每个程序员只有学习了这些工具之后才会不断成长,今天就和大家分享一些程序员必备的十项技能。老实说,如果每个程序员都非常了解这些工具,那么他可以在日常工作中完成…...

DHTMLX Suite 8.0 重大发布,新增更多新主题、热图图表、辅助功能支持功能
DHTMLX Suite 是一个用于构建跨浏览器Web应用和移动应用的强大JavaScript UI库。DHTMLX UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件,这些组件可以轻松组合到单个应用程序界面中。 DHTMLX Spreadsheet正版试…...

[华为OD机试 ] Linux发行版的数量(C++ Java JS Python)
文章目录 题目描述输入描述输出描述备注用例题目解析C++JavaScriptJavaPython题目描述 Linux操作系统有多个发行版,distrowatch.com提供了各个发行版的资料。这些发行版互相存在关联,例如Ubuntu基于Debian开发,而Mint又基于Ubuntu开发,那么我们认为Mint同Debian也存在关联…...

HydroD 实用教程(五)Morsion Model
目 录一、前言二、Morison 方程三、Morison 单元与属性3.1 Anchor Elements3.2 Pressure Area Elements3.3 TLP Elements3.4 Morison 3D Elements3.5 Morison (2D) Sections四、Element Correspondence五、参考文献一、前言 SESAM (Super Element Structure Analysi…...

成功解决xshell7会话窗口只能显示一个的问题
文章目录前言一. 问题复现二. 问题解决方法一方法二三. 拓展3.1 自定义快捷键3.2 将当前shell中的代码内容复制到记事本中3.3 xshell配置密钥登录3.3.1 生成密钥3.3.2 将密钥上传到服务器并设置3.3.3 用xshell密钥登录服务器总结前言 重点强调: 本文是解决xshell的…...

Spring security 个人理解
改文章写的很好:https://zhuanlan.zhihu.com/p/342755411 Spring security 分为两个部分 登陆认证权限认证 登陆认证 其实就是就是登陆注册,然后获取登陆凭证的问题 操作如下 登陆账号密码,通过账号查询出用户数据,然后密码进…...

线性表 顺序表数组
初识线性表 文章目录初识线性表线性表的类型定义基本操作(一)init,destory,clear基本操作(二) 判空 ,求长基本操作(三)取值,取位置基本操作(四&am…...

从WebRtc学习RTP协议
1、TCP为何不适用于实时音视频可靠性是以牺牲实时性为代价的。按照TCP原理,当出现极端网络情况时,理论上每个包的时延可达到秒级以上,而且这种时延是不断叠加的。这对于音视频实时通信来说是不可接受的。TCP为了实现数据传输的可靠性…...

centos7 配置samba
samba概述: Windows与Linux之间通信的桥梁,Samba是一个非常强大的文件服务器。Samba端口:udp 137 udp138,tcp139 tcp445。Samba工作模式:C/S模式(客户端-服务器) samba应用环境 1、文件共享&…...

前端转golang从小白到实战自学笔记(2023/3/1)
了解:https://www.runoob.com/go/go-concurrent.htmlgolang学习方向区块链研发工程师go服务器>(特点:数据处理,处理大并发)/游戏软件工程师golang分布式/云计算软件工程师(盛大云、cdn、京东)…...

10个必须知道的JavaScript技巧,让你成为更好的程序员
1.Promise回调地狱Promises 提供了一种优雅的方式来处理 JavaScript 中的异步操作。这也是避免“回调地狱”的解决方案之一。但是我并没有真正理解它的意思,所以我写了这段代码。我做了这些事情:先获取用户的基本信息。按用户信息获取所有文章的简要摘要…...

蓝桥杯真题(JAVA)--分巧克力
题目描述儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有 NN 块巧克力,其中第 i块是HiWi 的方格组成的长方形。为了公平起见,小明需要从这 NN 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足&…...

机器学习:学习KMeans算法,了解模型创建、使用模型及模型评价
机器学习:学习KMeans算法,了解模型创建、使用模型及模型评价 作者:AOAIYI 作者简介:Python领域新星作者、多项比赛获奖者:AOAIYI首页 😊😊😊如果觉得文章不错或能帮助到你学习&#…...

ChatGPT引爆AIGC,垂类龙头迎来“创新春天”
文|智能相对论作者|陈壹一款AI产品,到底有多神?ChatGPT刷新了我们的认知。它用2个月时间,完成TikTok花9个月,Instagram花2年半才做到的事,成为史上用户增速最快破亿的消费级应用程序。它也凭借一己之力,让谷…...

科技制造商必须对安全、设计选择承担更多责任
网络安全和基础设施安全局局长称当今商业网络安全的现状是"不可持续的",公司、消费者和政府必须集体转变期望,让主要软件和硬件制造商对不安全的产品负责,而不是用户。 拜登政府预计将在未来几天发布一项战略,该战略将…...

HTML认知
HTML认知 文章目录HTML认知语法规范注释标签组成和关系标签的关系标签学习排版系列标签**标题标签****段落标签**换行标签水平线标签文本格式化标签媒体标签图片标签src 目标图片的路径alt 替换文本title 图片的标题width 宽度 / height 高度路径绝对路径相对路径(常…...

全流程基于最新导则下的生态环境影响评价技术方法及图件制作与案例实践
根据最新生态环境影响评价导则,结合生态环评内容庞杂、综合性强的特点,以既包括陆域、又包括水域的项目为主要案例,对生态环评的具体流程及所需内容进行系统阐述。利用Rstudio、Fragstats等软件分析计算生态环评中所需各种指数,利…...

【Spring】Spring缓存注解@Cacheable、@CacheEvict、@CachePut使
文章目录1 基于注解的支持1.1 Cacheable1.1.1 value属性指定Cache名称1.1.2 使用key属性自定义key1.1.3 condition属性指定发生的条件1.2 CachePut1.3 CacheEvict1.3.1 allEntries属性1.3.2 beforeInvocation属性1.4 Caching1.5 使用自定义注解2 配置Spring对Cache的支持2.1 声…...

学了很久python却什么都做不了?这个方法一定要试试
很多人学了两三个月的python却什么都做不了,但有的人只学了不到一个月的时间,就可以开始自己做项目或者接私活,这是为什么? 作为20年码龄的老程序员,龙叔我觉得除了内在原因外,学习资源占据着大头。拥有好的…...

SiC MOSFET驱动电压的分析
SiC MOSFET驱动电压的分析 tips:资料来自富昌电子,及各个模块数据手册。 1.常见的Vgs与Vgs(th),以及对SiC MOSFET应用的影响 驱动电压Vgs和栅极电压阈值Vgs(th)关系到SiC MOSFET在应用过程中的可靠性,功率损耗(导通电阻),以及驱…...

Python爬虫之Scrapy框架爬虫实战
Python爬虫中Scrapy框架应用非常广泛,经常被人用于属于挖掘、检测以及自动化测试类项目,为啥说Scrapy框架作为半成品我们又该如何利用好呢 ?下面的实战案例值得大家看看。 目录: 1、Scrapy框架之命令行 2、项目实现 Scrapy框架…...

基于DSP的三相开关霍尔永磁同步电机控制
0 前言 本文本应该是一篇 记录我使用DSP28377D控制一个基于三相开关霍尔传感器的高速永磁同步电机全过程的长文,但大部分零散的知识点我都已经写成单独的博客了,所以本文更像是一个知识框架的梳理。本文最终目的是实现高速PMSM的电流-速度双闭环&#x…...