当前位置: 首页 > news >正文

【C语言标准库函数】标准输入输出函数详解[5]:格式化文件输入输出

目录

一、fprintf() 函数

1.1. 函数简介

1.2. fprintf使用场景

1.3. 注意事项

1.4. 示例

二、fscanf() 函数

2.1. 函数简介

2.2. fscanf使用场景

2.3. 注意事项

2.3. 示例

三、总结


在 C 语言中,格式化文件输入输出函数能够让我们以特定的格式对文件进行读写操作,使数据的处理更加灵活和方便。

一、fprintf() 函数

1.1. 函数简介

函数原型

int fprintf(FILE *stream, const char *format, ...);
  • 功能:向文件流中写入格式化的数据。
  • 参数
    • stream:文件指针。
    • format:格式字符串,指定输出数据的格式。
    • ...:可变参数,根据格式字符串进行格式化输出。
  • 返回值:成功写入的字符数,包括末尾的空字符(如果有的话);失败时返回负数。

1.2. fprintf使用场景

fprintf函数在C/C++编程中广泛使用,主要用于将格式化的数据输出到指定的文件流中。其主要使用场景包括:

  • 日志记录:将程序运行时产生的日志信息输出到文件中,便于后续的调试和排错。
  • 数据存储:将程序计算或处理得到的数据保存到文件中,以便后续使用或分析。
  • 数据导出:将程序处理过的数据按照指定的格式导出到文件中,供其他程序或系统使用。
  • 输出报表:将程序生成的报表或统计数据保存到文件中,方便查看和分析。
  • 配置文件生成:将程序运行时需要的配置信息保存到文件中,方便程序读取和使用。
  • 错误日志:将程序运行时出现的错误信息保存到文件中,用于错误追踪和处理。

1.3. 注意事项

在使用fprintf函数时,需要注意以下几点:

  • 文件打开:在调用fprintf之前,必须确保文件已经以正确的模式(如写入模式"w"或追加模式"a")打开,并且获取了有效的文件指针。
  • 格式化字符串:格式化字符串必须正确编写,包含必要的格式化指令(如%d、%f、%s等),用于指定输出数据的类型和格式。同时,需要确保格式化字符串与提供的参数列表相匹配,以避免输出错误或程序崩溃。
  • 参数列表:fprintf函数的参数列表是可变的,其类型和数量由格式化字符串中的格式化指令决定。在调用时,必须按照格式化指令的顺序依次传递相应的参数。
  • 返回值检查:fprintf函数的返回值是成功输出的字符数(不包括末尾的空字符),如果发生错误则返回负数。虽然在实际使用中很少根据返回值进行错误处理,但在某些情况下检查返回值可以帮助调试和诊断问题。
  • 文件关闭:在完成文件写入后,应使用fclose函数关闭文件流,以释放资源并避免潜在的文件损坏。
  • 缓冲区刷新:在某些情况下,为了确保数据及时写入文件,可能需要手动刷新输出缓冲区。虽然fprintf通常会在每次调用时自动刷新缓冲区(这取决于具体的实现和文件流的状态),但在某些特殊情况下(如输出到非标准文件流时),可能需要使用fflush函数来手动刷新缓冲区。

1.4. 示例

以下是一个使用fprintf函数将格式化数据写入文件的简单示例:

#include <stdio.h>  int main() {  FILE *file;  int num = 123;  float pi = 3.14159;  char str[] = "Hello, World!";  // 打开文件以写入数据  file = fopen("output.txt", "w");  if (file == NULL) {  printf("无法打开文件\n");  return 1;  }  // 使用fprintf向文件中写入格式化数据  fprintf(file, "整数: %d\n", num);  fprintf(file, "浮点数: %.2f\n", pi);  fprintf(file, "字符串: %s\n", str);  // 关闭文件  fclose(file);  return 0;  
}

运行结果: 

定义了要写入文件的数据(一个整数、一个浮点数和一个字符串)。接着,使用fopen函数以写入模式("w")打开了一个名为"output.txt"的文件,并获取了文件指针。之后,我们使用fprintf函数将格式化的数据写入文件。最后,我们使用fclose函数关闭了文件流。如果文件打开失败,fopen函数会返回NULL,此时我们打印了一条错误消息并返回了1。

二、fscanf() 函数

2.1. 函数简介

函数原型

int fscanf(FILE *stream, const char *format, ...);
  • 功能:从文件流中读取格式化的数据。
  • 参数
    • stream:文件指针。
    • format:格式字符串,指定输入数据的格式。
    • ...:可变参数,变量的地址,用于存储读取的数据。
  • 返回值:成功读取的输入项的数量,可能会因为匹配失败或到达文件末尾而小于请求的数量。

2.2. fscanf使用场景

fscanf函数是C语言标准库中的一个函数,它用于从文件流中读取格式化的输入。其使用场景非常广泛,包括但不限于:

  • 读取配置文件:程序经常需要从配置文件中读取设置或参数,这些文件通常以键值对或特定格式存储,fscanf可以根据指定的格式字符串读取这些数据。
  • 解析数据文件:对于存储了结构化数据的文件(如CSV文件、日志文件等),fscanf可以按照文件的格式规则读取并解析数据。
  • 读取用户输入文件:在某些程序中,用户可能需要上传或指定一个文件作为输入,程序可以使用fscanf从该文件中读取所需的数据。
  • 测试与验证:在开发过程中,为了测试程序的某个功能,可能需要从文件中读取测试数据,fscanf提供了一种便捷的方式来读取这些数据。

2.3. 注意事项

在使用fscanf函数时,需要注意以下几点:

  • 文件打开模式:确保文件以正确的模式(如读取模式"r")打开,并且文件指针是有效的。
  • 格式字符串:格式字符串必须正确编写,以匹配文件中数据的格式。如果格式字符串与文件中的数据格式不匹配,fscanf可能无法正确读取数据。
  • 变量类型匹配:传递给fscanf的变量类型必须与格式字符串中指定的类型相匹配。如果类型不匹配,可能会导致数据读取错误或程序崩溃。
  • 返回值检查:fscanf的返回值是成功匹配的输入项数,不包括任何填充的空白字符。如果返回值小于预期,可能表示读取过程中出现了错误或文件末尾已到达。
  • 空白字符处理:fscanf默认会跳过输入中的空白字符(如空格、制表符、换行符等),直到找到与格式字符串匹配的数据。如果需要读取空白字符,可以使用%c格式说明符,并注意处理空格和换行符。
  • 文件关闭:在完成文件读取后,应使用fclose函数关闭文件流,以释放资源并避免潜在的文件损坏。
  • 头文件:在使用文件输入输出函数之前,需要包含stdio.h头文件。

2.3. 示例

以下是一个使用fscanf函数从文件中读取数据的简单示例:

#include <stdio.h>  int main() {  FILE *fp;  int age;  float height;  char name[50];  // 打开文件  fp = fopen("output.txt", "r");  if (fp == NULL) {  perror("Error opening file");  return -1;  }  // 读取数据  while (fscanf(fp, "%s %d %f", name, &age, &height) == 3) {  printf("Name: %s, Age: %d, Height: %.2f\n", name, age, height);  }  // 关闭文件  fclose(fp);  return 0;  
}

假设output.txt文件包含了一系列以空格分隔的姓名、年龄和身高数据。使用fscanf函数从文件中读取这些数据,并打印到控制台上。注意,这里使用了%s来读取字符串,但需要注意的是,%s会读取直到遇到第一个空白字符(空格、制表符或换行符)为止的字符序列,并且不会跳过前面的空白字符。如果文件中姓名之间或姓名与其他数据之间可能包含多个空白字符,或者需要读取包含空格的字符串,则可能需要使用其他方法(如fgets配合sscanf)来读取数据。

三、总结

格式化文件输入输出函数fprintffscanf是C语言标准库中的重要组成部分,它们允许程序以格式化的方式处理文件内容。在使用这些函数时,需要注意格式控制字符串的书写、文件指针的有效性以及可能的错误处理。通过合理运用这些函数,可以实现灵活、高效的文件输入输出操作。

相关文章:

【C语言标准库函数】标准输入输出函数详解[5]:格式化文件输入输出

目录 一、fprintf() 函数 1.1. 函数简介 1.2. fprintf使用场景 1.3. 注意事项 1.4. 示例 二、fscanf() 函数 2.1. 函数简介 2.2. fscanf使用场景 2.3. 注意事项 2.3. 示例 三、总结 在 C 语言中&#xff0c;格式化文件输入输出函数能够让我们以特定的格式对文件进行…...

[概率论] 随机变量

Kolmogorov 定义的随机变量是基于测度论和实变函数的。这是因为随机变量的概念需要精确地定义其可能的取值、发生的概率以及这些事件之间的依赖关系。 测度论&#xff1a;在数学中&#xff0c;测度论是用来研究集合大小的理论&#xff0c;特别是无穷可数集和无界集的大小。对于…...

中国通信企业协会通信网络安全服务能力评定安全设计与集成服务能力评定三级要求准则...

安全设计与集成服务能力三级是通信网络安全服务能力评定安全设计与集成服务能力评定的最高等级&#xff0c;所需的要求也会更加严苛&#xff0c;不仅要满足安全设计与集成服务二级能力要求的所有条款&#xff0c;还要满足以下要求&#xff1a; 规模与资产要求 1)单位正规编制员…...

【C++语言】类和对象(下)

一、再谈构造函数 1.1 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _mont…...

【Spring】什么是Spring?

什么是Spring&#xff1f; Spring是一个开源的轻量级框架&#xff0c;是为了简化企业级开发而设计的。我们通常讲的Spring一般指的是Spring Framework。Spring的核心是控制反转(IoC-Inversion of Control)和面向切面编程(AOP-Aspect-Oriented Programming)。这些功能使得开发者…...

全面理解-c++11中的智能指针

在 C 中&#xff0c;智能指针&#xff08;Smart Pointers&#xff09; 是用于自动管理动态分配内存的类模板&#xff0c;遵循 RAII&#xff08;Resource Acquisition Is Initialization&#xff09; 原则&#xff0c;确保资源在生命周期结束时被正确释放&#xff0c;避免内存泄…...

【jmeter】在windows中,创建的变量,在jmeter中,读取变量失败的问题,路径问题

1.0 在windows中&#xff0c;jmeter读取变量失败 在路径配置的时候&#xff0c;配置按照D:\FtpDownload\${file_name}运行之后&#xff0c;下载的文件&#xff0c;文件名出现问题 \取消了$符号的意义&#xff0c;所以需要更改路径 D:\\FtpDownload\\${file_name}...

【CubeMX-HAL库】STM32F407—无刷电机学习笔记

目录 简介&#xff1a; 学习资料&#xff1a; 跳转目录&#xff1a; 一、工程创建 二、板载LED 三、用户按键 四、蜂鸣器 1.完整IO控制代码 五、TFT彩屏驱动 六、ADC多通道 1.通道确认 2.CubeMX配置 ①开启对应的ADC通道 ②选择规则组通道 ③开启DMA ④开启ADC…...

使用 POI-TL 和 JFreeChart 动态生成 Word 报告

文章目录 前言一、需求背景二、方案分析三、 POI-TL JFreeChart 实现3.1 Maven 依赖3.3 word模板设置3.2 实现代码 踩坑 前言 在开发过程中&#xff0c;我们经常需要生成包含动态数据和图表的 Word 报告。本文将介绍如何结合 POI-TL 和 JFreeChart&#xff0c;实现动态生成 W…...

xxl-job的分片广播

目录 xxl-job的分片广播 场景引入 xxl-job简介 xxl-job的部署安装 代码编写 1.导入依赖 2.yml文件编写 3.编写xxl-job执行器配置类&#xff0c;维护一个xxl-job执行器的bean 4.编写第一个任务&#xff0c;任务名字叫firstJob 5.进入服务端&#xff0c;增加执行器和任务…...

MobaXterm破解会话上限限制

1. 下载安装包MobaXterm-Keygen 下载路径&#xff1a; https://gitcode.com/gh_mirrors/mob/MobaXterm-Keygen 2. 搭建python3环境 window下python3环境搭建可参考网站&#xff1a; https://blog.csdn.net/enteracity/article/details/135479689 3. 生成文件Custom.mxtpro…...

vscode设置保存时自动缩进和格式化

参考博客 如何在 VSCode 中自动缩进你的代码 | Linux 中国 省流 使用 Ctrl Shift P 来打开命令模式&#xff0c;搜索 Open User Settings 并按下回车你需要搜索 Auto Indent&#xff0c;并在 “编辑器&#xff1a;自动缩进(Editor: Auto Indent)” 中选择 “全部(Full)”P…...

一键查看电脑各硬件详细信息 轻松查看电脑硬件参数

今天为大家推荐两款非常实用的电脑硬件查看软件&#xff0c;它们能够一键快速查看电脑的各种配置信息&#xff0c;使用起来非常方便。 一键查看电脑各硬件详细信息 这款软件是绿色版的&#xff0c;无需安装&#xff0c;打开即可使用&#xff0c;文件大小仅为900多KB&#xff0…...

【C++11】lambda和包装器

1.新的类功能 1.1默认的移动构造和移动赋值 原来C类中&#xff0c;有6个默认成员函数&#xff1a;构造函数/析构函数/拷⻉构造函数/拷⻉赋值重载/取地址重 载/const 取地址重载&#xff0c;最后重要的是前4个&#xff0c;后两个⽤处不⼤&#xff0c;默认成员函数就是我们不写…...

react redux用法学习

参考资料&#xff1a; https://www.bilibili.com/video/BV1ZB4y1Z7o8 https://cn.redux.js.org/tutorials/essentials/part-5-async-logic AI工具&#xff1a;deepseek&#xff0c;通义灵码 安装相关依赖&#xff1a; 使用redux的中间件&#xff1a; npm i react-reduxreact-…...

前端HTML标签 meta中常见的一些属性

meta中常见的一些属性 <meta/> 标签的属性 <meta/> 是什么&#xff1f; <meta/> 标签主要用于表示和当前文档相关的 元数据 信息。 而 元数据&#xff08;metadata&#xff09;&#xff0c;简单的来说就是描述数据的数据。例如&#xff0c;一个 HTML 文件是一…...

127,【3】 buuctf [NPUCTF2020]ReadlezPHP

进入靶场 吓我一跳 查看源码 点击 审计 <?php// 定义一个名为 HelloPhp 的类&#xff0c;该类可能用于执行与日期格式化相关的操作 class HelloPhp {// 定义一个公共属性 $a&#xff0c;用于存储日期格式化的模板public $a;// 定义一个公共属性 $b&#xff0c;用于存储…...

继承(python)

一、基础知识 &#xff08;一&#xff09;定义&#xff1a;子类能继承父类所有的公有属性和公有方法&#xff08;先使用子类的方法、属性&#xff09; &#xff08;二&#xff09;格式&#xff1a; class 子类名&#xff08;父类名&#xff09;&#xff1a; #父类 class Ph…...

驱动开发系列36 - Linux Graphics 2D 绘制流程

一: 概述 在Linux中,2D绘制流程是操作系统、图形库、显示协议、驱动程序等多个组件协调工作的结果。整体流程如下步骤所示: 1. 客户端请求:客户端程序(如GTK、Qt应用程序)通过X11协议与Xorg-Server通信(或通过Wayland协议与Wayland合成器通信)、请求绘制2D图形,比如绘制…...

STL函数算法笔记

STL函数算法笔记 今天我们来学习的是STL库中的一些函数。首先,STL这个东西大家一定非常熟悉,里面很多的数据结构都帮了大家不少忙,那么今天我们就来说几个重要的数据结构。 向量 向量,也就是数据结构vector,你也可以称之为动态数组,本质跟数组差不多,只不过有一些好处…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...