八种顺序读写函数的介绍(fput/getc;fput/gets;fscanf,fprintf;fwrite,fread)

一:读写的含义的解释:

读(读出):即从文件里面读出数据----------->和scanf从键盘里面读出数据类似

写(写入):即把数据写入文件里面----------->和printf把数据写入到屏幕上类似


二:使用读写函数的模型:

1,打开文件

 函数功能:用于打开一个文件,并返回一个与该文件关联的FILE指针。

参数解释:

  • filename:这是您想要打开的文件的名称(包括路径,如果文件不在当前目录下)。
  • mode:这是一个字符串,用于指定文件应如何被打开。例如,"r"表示只读模式,"w"表示写模式(如果文件不存在,则创建它;如果文件存在,则覆盖它),"a"表示追加模式(如果文件不存在,则创建它;如果文件存在,则在文件末尾追加内容),等等。

2,通过打开文件的返回值判断是否打开成功

3,进行读写操作
4,关闭文件,置空文件指针

函数功能:用于关闭一个已打开的文件。

参数解释:stream是需要被关闭的文件的文件指针

?:那为什么scanf printf的时候,直接使用就行了,不需要打开什么??

这是因为c语言程序,只要运行起来,就会默认打开3个流
1,标准输入流 stdin 
2,标准输出流 stdout 
3,标准错误流 stderr 

三个流的类型依然是 FILE*,和读写函数的参数一致

三:读写函数的参数特点:
都是与 FILE * stream(流)有关,流是什么? 流可以是文件,从流里面读出数据,写入数据到流里面,只是不同的读写函数去读写的数据不一样,一些是把单个字符写入到流,或从流里读出单个字符,一些是字符串的读写,一些是二进制的读写
四:顺序读写函数的介绍
1:fputc函数

 函数功能:

        将字符写入到文件中,写入一个字符后,文件的“当前位置”就会向前移动一个字符的位置。(将 int character 写入到 FILE * stream 中)

返回值:

  • 函数返回一个int类型的值。如果写入成功,它返回写入的字符。如果发生错误,它返回EOF(End Of File,文件结束标志)。

函数的使用展示:

第一种( 用fputc函数,将一个字符a写入到文件中,该文件名为data.txt)

第二种(用fputc函数,将英文字母表写入到文件中,该文件名为data.txt) 

2:fgetc函数

 函数功能: 

        从指定的文件流(stream)中读取一个字符

返回值:

        返回该字符的 ASCII 值。如果文件流已经到达文件末尾,则返回 EOF(End Of File,一个特殊的常量,通常在大多数系统中定义为 -1)。

函数的使用展示:

第一种( 用fgetc函数,从文件中获取一个字符,该文件名为data.txt)

data.txt文件统一为我们在vs路径下创建的一个英文字母表文本文件

 第二种( 用fgetc函数,从文件中获取字母表的全部字符,该文件名为data.txt)

3:fputs函数

函数功能:

        将字符串写入到指定的文件流中(将字符串str写入到文件流stream中)

 返回值:

  • 函数返回一个整数。如果成功,它将返回非负值(通常是EOF之外的任何值)。如果发生错误(例如,流是无效的或不可写的),则返回EOF

函数使用展示:

可知:该函数不会换行,需要自己加\n

4:fgets函数 

函数功能:

        从指定的文件流中读取一个字符串(从文件流stream中读取一个最大字符数为(num-1)的字符串str) 

注意:

  • fgets 从 stream 中读取字符,并将它们存储为 C 字符串到 str 中,直到读取了 (num-1) 个字符或遇到换行符(\n)或文件结束符(EOF)为止,以先到者为准。
  • 如果遇到换行符,fgets 会停止读取,但该换行符仍然被认为是有效的字符,并被包含在复制到 str 的字符串中。
  • 在复制到 str 的字符之后,fgets 会自动附加一个终止的空字符(\0),以确保 str 是一个有效的 C 字符串。

返回值:读取成功返回 str,读取失败返回NULL

函数使用展示

第一种:从data.txt中读取num为10,也就是num-1,9个字符,作为一个字符串str(注意中的第一点

第二种:从data.txt中读取远远超过文件本身的字符长度,作为一个字符串str(注意中的第二点

!:虽然100远远超过文件里的字符串长度,但是遇到 \n 就会自己停止读取

5:fprintf函数

函数功能:

        将格式化的数据写入到指定的文件流中

参数解释:

  1. const char *format:这是一个格式字符串,指定了如何格式化后面的参数。格式字符串可以包含普通字符和格式说明符(以 % 开头的子序列)。普通字符会被原样复制到输出流中,而格式说明符会被后面传入的参数替换。
  2. ...:这是一个可变参数列表,表示 fprintf 函数可以接受任意数量的额外参数。这些参数的数量和类型应该与格式字符串中的格式说明符相匹配。

返回值:

  1. On success, the total number of characters written is returned.

    • 当操作成功时,返回写入的字符总数。
    • 这意味着,如果你写入了5个字符,并且没有发生任何错误,那么该函数将返回5。
  2. If a writing error occurs, the error indicator (ferror) is set and a negative number is returned.

    • 如果在写入过程中发生错误,那么错误指示器(通常是一个变量或标志)将被设置,并且返回一个负数。
    • 这种返回值可以帮助调用者(即使用该函数的代码)知道发生了错误,并且可以通过检查ferror来确定错误的具体原因。

函数使用展示

将一个整数和一个浮点数写入到文件中

6:fscanf 函数 

函数功能:

        从文件中读取格式化的数据

参数解释:

  1. **const char *format**:

    • 这是一个格式字符串,它指定了应该如何读取和解析数据。格式字符串中的格式说明符(如 %d%s%f 等)告诉 fscanf 应该如何解释和存储数据。
  2. **...**:

    • 这表示函数接受可变数量的参数,这些参数是根据格式字符串中的格式说明符来指定的。

返回值:

  1. 成功时的返回

    • 当函数成功执行时,它会返回成功填充到参数列表中的项目数量。
    • 这个数量可能与预期的项目数量相同,但也可能更少(甚至为零)。
  2. 为什么会比预期少

    • 匹配失败:可能是因为输入的数据与预期的格式或模式不匹配。
    • 读取错误:在尝试读取数据时,可能会发生某种错误,如文件损坏或磁盘错误。
    • 达到文件末尾:如果函数正在从文件中读取数据,并且已经到达了文件的末尾,那么它可能无法填充更多的项目。(一般这种原因居多)
  3. 关于错误指示

    • 如果在读取过程中发生读取错误或达到文件末尾,相应的标志(如feofferror)会被设置。
    • 如果在这些情况发生之前,函数还没有成功读取到任何数据,它会返回EOF(End Of File),这是一个特殊的值,表示文件结束或读取失败。

函数使用展示:

把我们创建好的文件data.txt中的整数和浮点数放回一个结构体中

 7:fwrite 函数 

函数功能: 

        将数据块以二进制的形式写入文件流(fwrite 从由 ptr 指向的内存块中取出 count 个元素,每个元素的大小为 size 字节,并将它们写入到 stream 指向的文件流中)

参数解释:

  1. ptr:指向要写入的数据块的指针。这个数据块可以是任何类型,不仅仅是字符。
  2. size:每个元素的大小(以字节为单位)。
  3. count:要写入的数据元素的数量。
  4. stream:指向要写入的文件流的指针。

返回值:

  1. The total number of elements successfully written is returned.

    • 这意味着该函数返回成功写入的元素总数。
  2. If this number differs from the count parameter, a writing error prevented the function from completing.

    • 如果返回的数量与传入的 count 参数不同,那么说明在写入过程中出现了错误,导致函数没有完成预期的写入操作。
  3. In this case, the error indicator (ferror) will be set for the stream.

    • 在出现写入错误的情况下,流的错误指示器(ferror)会被设置。这意味着您可以通过检查 ferror 来确定是否发生了写入错误。
  4. If either size or count is zero, the function returns zero and the error indicator remains unchanged.

    • 如果 size 或 count 参数中的任何一个为零,那么函数将返回零,并且流的错误指示器不会改变。这意味着在这种情况下,没有发生错误,但也没有写入任何数据。

函数使用展示:

从 s 中向 pf 中以二进制的形式写入 1 个大小为 sizeof(struct S) 的数据

 8:fread 函数 

函数功能:

        从文件流中读取数据(fread 函数从给定的文件流 stream 中读取数据。它读取 count 个元素,每个元素的大小为 size 字节,并将这些数据存储在由 ptr 指向的内存块中)

参数解释:

  1. void * ptr:这是一个指向要存储读取数据的内存块的指针。fread 会将读取的数据存储在这个内存块中。
  2. size_t size:每个要读取的元素的大小(以字节为单位)。
  3. size_t count:要读取的元素数量。
  4. FILE * stream:这是一个指向要从中读取数据的文件流的指针。

返回值:

  1. The total number of elements successfully read is returned.

    • 这意味着该函数返回成功读取的元素总数。
  2. If this number differs from the count parameter, either a reading error occurred or the end-of-file was reached while reading.

    • 如果返回的成功读取的元素总数与count参数不同,那么有两种可能的原因:
      1. 读取过程中发生了错误。
      2. 在读取过程中已经到达了文件的末尾。
  3. In both cases, the proper indicator is set, which can be checked with ferror and feof, respectively.

    • 在上述两种情况下,相应的指示器会被设置。你可以使用ferror函数来检查是否有读取错误,而使用feof函数来检查是否已到达文件末尾。
  4. If either size or count is zero, the function returns zero and both the stream state and the content pointed by ptr remain unchanged.

    • 如果sizecount中的任何一个为零,该函数会返回零,并且流的状态以及由ptr指向的内容都不会改变。

函数使用展示:

从 pf 中以二进制的形式读取 1 个大小为 sizeof(struct S) 的数据,放进 s 中

谢谢观看,祝你开心~

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

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

相关文章

【leetcode】双“指针”

标题:【leetcode】双指针 水墨不写bug 我认为 讲清楚为什么要用双指针 比讲怎么用双指针更重要! (一)快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数…

Unity 窗口化设置

在Unity中要实现窗口化,具体设置如下: 在编辑器中,选择File -> Build Settings。在Player Settings中,找到Resolution and Presentation部分。取消勾选"Fullscreen Mode",并选择"Windowed"。设…

Linux:Jenkins:参数化版本回滚(6)

上几章我讲到了自动集成和部署 Linux:Jenkins全自动持续集成持续部署(4)-CSDN博客https://blog.csdn.net/w14768855/article/details/136977106 当我们觉得这个页面不行的时候,需要进行版本回滚,回滚方法我这里准备了…

Linux 反引号、单引号以及双引号的区别

1.单引号—— 单引号中所有的字符包括特殊字符($,,和\)都将解释成字符本身而成为普通字符。它不会解析任何变量,元字符,通配符,转义符,只被当作字符串处理。 2.双引号——" 双引号,除了$,…

LangSAM项目优化,将SAM修改为MoblieSAM,提速5~6倍

Language Segment-Anything 是一个开源项目,它结合了实例分割和文本提示的强大功能,为图像中的特定对象生成蒙版。它建立在最近发布的 Meta 模型、segment-anything 和 GroundingDINO 检测模型之上,是一款易于使用且有效的对象检测和图像分割…

定时任务 之 cron 表达式

Cron 表达式产生的背景:在Unix系统中,用户经常需要设置一些周期性被执行的任务,如定期备份文件、发送邮件等。为了满足这种需求,Unix系统提供了crontab命令,允许用户定义任务的时间表,并在指定的时间点自动…

实现实时查询并带有查询结果列表的输入框

这个功能主要是实现了一个可以实时查询结果的搜索框,并具备点击外部关闭搜索结果框体的功能,除了v-show和transition依托于vue实现以外其余功能都基于原生JS实现。 效果图: 该功能的实现主要是很久之前面试被问到过,当时没有做出…

Linux:进程控制

进程创建 进程&#xff1a;内核的相关管理数据结构&#xff08;task_structmm_struct页表&#xff09;代码&#xff08;<-共享&#xff09;和数据(<-写时拷贝) fork函数初识 在 linux 中 fork 函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程…

1992-2022年经过矫正的夜间灯光数据

DMSP/OLS夜间灯光的年份是1992-2013年&#xff0c;NPP/VIIRS夜间灯光的年份是2012-2021&#xff0c;且由于光谱分辨率、空间分辨率、辐射分辨率、产品更新周期等方面的差异&#xff0c;DMSP-OLS和SNPP-VIIRS数据不兼容&#xff0c;也就是说我们无法直接对比分析DMSP-OLS和SNPP-…

Linux常用命令-文件操作

文章目录 ls基本用法常用选项组合选项示例注意事项 cd基本用法示例注意事项 pwd基本用法示例选项总结 cp基本用法常见选项示例注意事项 rm基本用法常见选项示例删除单个文件&#xff1a;交互式删除文件&#xff1a;强制删除文件&#xff1a;递归删除目录&#xff1a;交互式递归…

实验02-1 C#和ASP.NET控件:在Web窗体中输出九九乘法表

【实验内容及要求】 1. 在Web窗体中输出九九乘法表 浏览效果如图2-1所示。 图2-1 在Default.aspx.cs中编写C#代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;public par…

项目四-图书管理系统

1.创建项目 流程与之前的项目一致&#xff0c;不再进行赘述。 2.需求定义 需求: 1. 登录: ⽤⼾输⼊账号,密码完成登录功能 2. 列表展⽰: 展⽰图书 3.前端界面测试 无法启动&#xff01;&#xff01;&#xff01;--->记得加入mysql相关操作记得在yml进行配置 配置后启动…

操作系统系列学习——多级页表与快表

文章目录 前言多级页表与快表 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划学习操作系统并完成6.0S81&#xff0c;加油&#xff01; 本文总结自B站【哈工大】操作系统 李治军&#xff08;全32讲&#xff09; 老师课程讲的非常好&#xff0c;感谢 【哈工…

PythonGUI应用:模拟航空订票小程序

在本教程中&#xff0c;我们将创建一个基本的航空订票管理系统GUI应用&#xff0c;用户可以通过图形界面执行各种操作。我们将使用Python编程语言和Tkinter库来实现此应用。 功能概述&#xff1a; 航班管理&#xff1a; 用户可以添加新的航班&#xff0c;输入航班号、起始地、目…

Convex and Semi-Nonnegative Matrix Factorizations

我们提出了非负矩阵分解&#xff08;NMF&#xff09;主题的几种新变体。考虑形式为X FG^T的因子分解&#xff0c;我们关注的是G被限制为包含非负元素的算法&#xff0c;但允许数据矩阵X具有混合符号&#xff0c;从而扩展了NMF方法的适用范围。我们还考虑了基向量F被约束为数据…

Ubuntu20.04更换镜像源------最简单的教程

本教程适用于&#xff1a;Ubuntu22.04 操作流程 打开终端&#xff0c;运行以下命令&#xff1a; sudo sed -i "shttp://.*archive.ubuntu.comhttps://mirrors.tuna.tsinghua.edu.cng" /etc/apt/sources.list 运行后即完成更改。 如果找不到22.04的镜像&#xff…

海外盲盒APP:加速开拓海外盲盒市场

盲盒是年轻群体消费中增速较快的模式&#xff0c;从前几年起&#xff0c;盲盒就在我国掀起了一股热潮&#xff0c;市场得到了迅速发展。 如今&#xff0c;盲盒经济已经遍布到了全球&#xff0c;尤其是在亚洲地区&#xff0c;盲盒消费呈现出了高速发展态势&#xff0c;在海外市…

支小蜜校园防霸凌系统的具体功能是什么?

在当今社会&#xff0c;校园霸凌问题日益严重&#xff0c;成为影响学生健康成长的一大隐患。为了应对这一问题&#xff0c;许多学校开始引入校园防霸凌系统。这一系统以其独特的功能&#xff0c;为校园安全提供了有力保障&#xff0c;为学生的健康成长创造了良好环境。 校园防…

蓝桥杯单片机快速开发笔记——PCF8591的DAC模拟电压输出

一、原理分析 PCF8591电压信号探测器&#xff1a;http://t.csdnimg.cn/R38tC IIC原理&#xff1a;http://t.csdnimg.cn/v4dSv IIC指令&#xff1a;http://t.csdnimg.cn/RY6yi HC573/HC138&#xff1a;http://t.csdnimg.cn/W0a0U 数码管&#xff1a;http://t.csdnimg.cn/kfm9Y 独…

反序列化动态调用 [NPUCTF2020]ReadlezPHP1

在源代码上看到提示 访问一下看看 代码审计一下 <?php #error_reporting(0); class HelloPhp {public $a;public $b;public function __construct(){$this->a "Y-m-d h:i:s";$this->b "date";}public function __destruct(){$a $this->a;…