C语言:文件操作(2)

4.2 fputc的使用

这里写自定义目录标题


fputc的定义:

主要功能:一个字符一个字符的写进文件,将int类型的字符character写进文件流(FILE* stream)中,返回一个整形。如果成功fputc会返回写进文件的字符,如果发生错误,fputc会返回EOF(-1)
在这里插入图片描述
在这里插入图片描述
代码1:

int main()
//{
//	//打开文件
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//成功打开文件并开始写文件
//	fputc('a', pf);//把字符a写进文件
//	fputc('b', pf);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}

代码2:

int main()
{//打开文件FILE* pf = fopen("test.txt", "w");if (pf == NULL){perror("fopen");return 1;}//成功打开文件并开始写文件//将26个英语字母写进文件char ch = 0;for (ch = 'a'; ch <= 'z'; ch++){fputc(ch, pf);}//关闭文件fclose(pf);pf = NULL;return 0;
}

运行结果:
在这里插入图片描述
解析:能够使用for循环一次性输出26个英语字母,这是因为fputc没有遇到错误就会一直向文件写。

4.3 fgets的使用
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
需要注意的是:fgets会在读取字符串时主动在文件末尾加上‘\0’,既如果我们要读取n个字符,那我们只能读取(n - 1)个字符。

代码3:

int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}char arr[10] = { 0 };fgets(arr, 10, pf);fclose(pf);pf = NULL;return 0;
}

test.txt中的内容:

hello world

运行结果:
在这里插入图片描述
解析:我们可以看到数组第十个数arr[9]为’\0’,但是我们知道test.txt文件流中第10个元数为l,所以我们需要注意fgets的使用会在文件末尾主动加上‘\0’。
验证代码:

int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}char arr[20] = "xxxxxxxxxxxxxxxxxxx";fgets(arr, 20, pf);fclose(pf);pf = NULL;return 0;
}

运行结果:
在这里插入图片描述
解析:
我们首先将数组开辟20个字节大小并全部初始化为x,当在test.txt文件流中的字符串“hello world”读取时,我们将数组前11个元素赋值为“hello world”。但是我们可以看到在第11个元素的位置有‘\0’,并且后面的元素仍为x。这间接说明fgets会主动在读取完字符串后主动加上’\0’。

4.4 fputs的使用

主要功能:
将被指针指向的字符串写进文件流(FILE*stream)中,直到遇到 ‘\0’ ,不会将‘\0’写进文件流。
在这里插入图片描述
在这里插入图片描述
代码4:

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

运行结果:成功将字符串“hello world”写进文件“test.txt”

在这里插入图片描述
4.5 fseek 的使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
主要功能:根据文件指针的位置和偏移量确定文件指针指向的内容
在这里插入图片描述
其中(FILE*stream)指的是要查找的文件流,在代码5中指的是文件流pf,(long int offset)指的是相对于当前鼠标的偏移量,(int origin)指的是指针当前的位置。其中指针当前的位置共有3个,分别是文件的起始位置(SEEK_SET),文件指针的当前位置(SEEK_CUR),和文件末尾(SEEK_END)。在这里插入图片描述

代码5://SEEK_CUR的使用

int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}int ch = fgetc(pf);printf("%c\n", ch);//afseek(pf, 4, SEEK_CUR);ch = fgetc(pf);printf("%c\n", ch);//ffclose(pf);pf = NULL;return 0;
}

test.txt文件中的内容:

abcdefhhijk

运行结果:
在这里插入图片描述
解析:我们先使用fgetc从test.txt中读取一个字符a,此时光标在a后面闪烁,fseek(pf, 4, SEEK_CUR);的意思是从光标当前位置(即a的后面)向后查找偏移4个字节大小的字符(即f)。
在这里插入图片描述

代码6:

int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}int ch = fgetc(pf);printf("%c\n", ch);//afseek(pf, 4, SEEK_SET);ch = fgetc(pf);printf("%c\n", ch);//ffclose(pf);pf = NULL;return 0;
}

运行结果:
在这里插入图片描述
解析:
我们先使用fgetc从test.txt中读取一个字符a,此时光标在a后面闪烁,fseek(pf, 4, SEEK_SET);的意思是从文件起始位置(即a的前面)向后查找偏移4个字节大小的字符(即e)。要注意的是即便我们一开始已经读取了1个字节内容并且光标位置发生改变但是这并不影响偏移量的开始位置(文件的起始位置),即无论在我们调用fseek(pf, 4, SEEK_SET);时前面已经使用过多少次fgetc,这都不会改变我们的读取结果为e。
在这里插入图片描述
代码7:

int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}int ch = fgetc(pf);printf("%c\n", ch);//afseek(pf, -4, SEEK_END);ch = fgetc(pf);printf("%c\n", ch);//ffclose(pf);pf = NULL;return 0;
}

test.txt的代码:

abcdefghijk

运行结果:
在这里插入图片描述
解析:
我们先使用fgetc从test.txt中读取一个字符a,此时光标在a后面闪烁,fseek(pf, -4, SEEK_END);的意思是从文件末尾位置(即k的后面)向前查找偏移4个字节大小的字符(即h)。要注意的是即便我们一开始已经读取了1个字节内容并且光标位置发生改变但是这并不影响偏移量的开始位置(文件的末尾位置),即无论在我们调用fseek(pf, -4, SEEK_END);时前面已经使用过多少次fgetc,这都不会改变我们的读取结果为h。
这里的偏移量之所以是-4是因为SEEK_END是从最末尾开始读取字节。所以我们需要向前读取字符内容,向后读取4个字节为4,读取-4个字节就相当于向前读取4个字节。

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

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

相关文章

oppo,快手25届暑期实习内推

oppo&#xff0c;快手25届暑期实习内推 ①OPPO 【内推码】&#xff1a;X6866447 【一键内推】:https://careers.oppo.com/university/oppo/campus/post?shareId4546 【需求岗位】软件类、AI/算法类、硬件类、设计类、产品类 ②快手 【岗位】算法、工程、游戏&#xff0c;产品运…

城市雨量水位监测站

TH-SW2在繁华的现代都市中&#xff0c;有这样一个默默奉献的守护者&#xff0c;它时刻监测着城市的雨量和水位&#xff0c;为城市的安全提供着重要的保障。它就是我们今天要介绍的——城市雨量水位监测站。 一、雨量水位监测站的重要性 城市雨量水位监测站是城市防洪排涝体系的…

方法区及元空间简介

什么是方法区&#xff1f; 方法区属于是 JVM 运行时数据区域的一块逻辑区域&#xff0c;是各个线程共享的内存区域。《Java 虚拟机规范》只是规定了有方法区这么个概念和它的作用&#xff0c;方法区到底要如何实现那就是虚拟机自己要考虑的事情了。也就是说&#xff0c;在不同…

全局UI方法-弹窗三-文本滑动选择器弹窗(TextPickDialog)

1、描述 根据指定的选择范围创建文本选择器&#xff0c;展示在弹窗上。 2、接口 TextPickDialog(options?: TextPickDialogOptions) 3、TextPickDialogOptions 参数名称 参数类型 必填 参数描述 rang string[] | Resource 是 设置文本选择器的选择范围。 selected nu…

AI图像重绘解决方案

高质量的图像素材往往成本高昂且制作周期长&#xff0c;给企业带来了不小的困扰。美摄科技凭借其领先的AI图像重绘解决方案&#xff0c;为企业提供了一种高效、便捷且成本可控的图像优化途径&#xff0c;助力企业重塑视觉形象&#xff0c;引领市场新风尚。 美摄科技的AI图像重…

uniapp小程序路由跳转,使用uni.navigateBack方法,实现页面返回上一页

在小程序中uni.navigateTo和uni.redirectTo是通过路由拼接的方式传参 uni.navigateTo({url: test?id1&nameuniapp });uni.redirectTo({url: test?id1 });uni.navigateBack() 是一个用于在uni-app中进行页面后退操作的API。它可以让你返回到上一个页面。在给定的示例中&a…

python提取视频中的音频

一、搭建环境 1、安装python 2、安装moviepy包 pip3 install moviepy 二、实现思路 1、先通过get请求把视频下载下来 2、再通过moviepy模块去提取视频中的音频 三、完整代码 import requests from moviepy.editor import VideoFileClip""" 支持视频格式 MP…

NASA数据集——2014 年、2015 年和 2017 年北美地区土壤地球物理属性值(源层厚度 (ALT)、介电常数、土壤水分剖面、表面粗糙度)

ABoVE: AirSWOT Color-Infrared Imagery Over Alaska and Canada, 2017 简介 文件修订日期&#xff1a;2019-04-25 数据集版本: 1 摘要 本数据集提供了根据 2014 年、2015 年和 2017 年 8 月和 10 月在阿拉斯加北部 12 个研究地点&#xff08;除个别地点外&#xff09;采集…

LLM大语言模型(八):ChatGLM3-6B使用的tokenizer模型BAAI/bge-large-zh-v1.5

背景 BGE embedding系列模型是由智源研究院研发的中文版文本表示模型。 可将任意文本映射为低维稠密向量&#xff0c;以用于检索、分类、聚类或语义匹配等任务&#xff0c;并可支持为大模型调用外部知识。 BAAI/BGE embedding系列模型 模型列表 ModelLanguageDescriptionq…

CCIE-11-IPSec-VPN

目录 实验条件网络拓朴实验目的 开始配置1. R2 Ping R3确定基础网络是通的2. 配置R23. 配置R34. 测试 实验条件 网络拓朴 实验目的 为PC1和PC2建立IPSec VPN PC1可以ping通PC2 开始配置 1. R2 Ping R3确定基础网络是通的 R2#show ip int br Interface IP…

UE5启用SteamOSS流程

一、安装OnlineSubsystemSteam插件 1、在UE里安装OnlineSubsystemSteam 2、设置默认开始地图 3、设置DefaultEngine.ini文件&#xff1a; 打开项目根目录/Config/DefaultEngine.ini文件 打开官网的配置说明 复制并粘贴到该文件中 4、设置运行模式 5、测试 确保Steam平台已…

简述双亲委派以及为什么使用双亲委派

你得先知道 在介绍双亲委派机制的时候&#xff0c;不得不提ClassLoader&#xff08;类加载器&#xff09;。说ClassLoader之前&#xff0c;我们得先了解下Java的基本知识。 Java是运行在Java的虚拟机(JVM)中的&#xff0c;但是它是如何运行在JVM中了呢&#xff1f;我们在IDE…

赛宁电力靶场护航电力行业高质量发展,加快形成新质生产力

今年的政府工作报告对能源电力发展作出新部署、提出新要求&#xff1a;“强化能源资源安全保障”……其中网络安全也是影响能源电力发展的重要因素&#xff0c;在全球范围内以电力系统为代表的关键基础设施频频成为网络攻击的重点目标。电力系统是关键信息基础设施重要组成部分…

【算法集训】基础算法:滑动窗口

定义一个快慢指针&#xff0c;用于截取数组中某一段信息。同时可以改变快慢指针的值来获取结果&#xff0c;这个过程比较像滑动。 1493. 删掉一个元素以后全为 1 的最长子数组 定义快慢指针快指针先走&#xff0c;如果到了第二个0上的时候。前面1的个数就是fast - slow - 1&a…

【MATLAB源码-第24期】基于matlab的水声通信中海洋噪声的建模仿真,对比不同风速的影响。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 水声通信&#xff1a; 水声通信是一种利用水中传播声波的方式进行信息传递的技术。它在水下环境中被广泛应用&#xff0c;特别是在海洋科学研究、海洋资源勘探、水下军事通信等领域。 1. **传输媒介**&#xff1a;水声通信利…

人工智能本地化的时代即将到来

2024 年 3 月 26 日&#xff0c;我有幸应邀参加了在北京凤凰中心举办的AI PC发布会。在这次活动中&#xff0c;英特尔展示了基于第一代酷睿 Ultra 高能效 X86 处理器的商用客户端&#xff0c;充分展现了 AI 加速下企业业务数字化的新趋势。英特尔成功地实现了对 AIGC 的最后一公…

51单片机学习笔记11 使用DS18B20温度传感器

51单片机学习笔记11 使用DS18B20温度传感器 一、DS18B20简介1. 主要特点2. 工作原理3. 引脚说明4. ROM 二、1-wire协议简介1. 总线结构&#xff1a;2. 通信方式&#xff1a;3. 数据传输&#xff1a;4. 设备识别&#xff1a;5. 供电方式&#xff1a;6. 应用场景&#xff1a;7. 优…

【SQL】COUNT()函数 用法详解

COUNT()函数 COUNT函数用法&#xff1a;COUNT ( [ALL | DISTINCT] column | expression | *) ALL关键字指示统计所有值&#xff0c;而DISTINCT关键字强制函数仅对不同的值进行操作。 默认情况下&#xff0c;使用ALL选项。条件表达式 COUNT()函数中条件表达式加 OR null。例如…

深度学习 Lecture 6 学习曲线、高偏差和高方差的调整和误差分析过程

一、学习曲线&#xff08;Learning curves) 用处&#xff1a;帮助了解学习算法性能如何的方式 曲线随着经验的数量&#xff08;算法所拥有的训练样本&#xff09;发生的变化 PS: 随着训练样本的增大&#xff0c;交叉验证误差会越来越小&#xff0c;趋于平稳&#xff1b;而训…

机器学习之决策树桩或决策残端(Decision Stump)

简介 决策树是一种常见的机器学习模型,它由一个树状结构组成,每个节点代表一个特征属性的决策规则,而每个叶子节点代表一个类别标签或者是一个数值输出。决策树的每个节点都会根据一个特征属性进行划分,直到达到某个停止条件为止,例如节点中的样本数量小于某个阈值,或者…