当前位置: 首页 > 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,你也可以称之为动态数组,本质跟数组差不多,只不过有一些好处…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...