C语言 文件读写

news/2024/4/20 19:17:57/文章来源:https://blog.csdn.net/la_fe_/article/details/129204467

目录

    • 1. 文件打开与关闭
      • 1.1 打开文件 fopen( )
      • 1.2 关闭文件 fclose()
    • 2. 读取文件
      • 2.1 fgetc()
      • 2.2 fgets()
      • 2.3 fscanf()
    • 3. 写入文件
      • 3.1 fputc()
      • 3.2 fputs()
      • 3.3 fprintf()

1. 文件打开与关闭

1.1 打开文件 fopen( )

(1)函数功能:使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件
(2)函数原型:

FILE *fopen( const char *filename, const char *mode );

(3)参数解释:

  • filename:字符串,文件名
  • mode:打开模式,常用的有 r、w、a

1.2 关闭文件 fclose()

(1)函数功能:
清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。
(2)函数原型:

 int fclose( FILE *fp );

如果成功关闭文件,fclose( ) 函数返回零,如果关闭文件时发生错误,函数返回 EOF。

FILE *f; 
f=fopen("test.log","r");
if(f == NULL)printf("file open failed.\r\n")
fclose(f)

2. 读取文件

2.1 fgetc()

(1)函数功能
fgetc() 函数从 fp 所指向的输入文件中读取一个字符。
(2)函数原型

int fgetc( FILE * fp );

返回值是读取的字符,如果发生错误则返回 EOF。

2.2 fgets()

(1)函数功能
fgets() 从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区 buf,并在最后追加一个 null 字符来终止字符串。

如果这个函数在读取最后 n - 1个字符之前就遇到一个换行符 ‘\n’ 或文件的末尾 EOF,则只会返回读取到的字符,包括换行符,即读取一行
(2)函数原型

char *fgets( char *buf, int n, FILE *fp );

(3)示例

int main()
{FILE *f;f = fopen("test_log", "r");if (f ==NULL)printf("file open failed.\r\n");char data[100] = {0};fgets(data, 100, f);printf("%s\r\n", data);fclose(f);return 0;
}

输出结果:

this is test log.

2.3 fscanf()

(1)函数功能
从文件中读取字符串,但是在遇到第一个空格和换行符时,它会停止读取。
(2)函数原型

int fscanf(FILE *fp, const char *format, ...)
  • format:格式描述符 %s %d
  • 省略号可以是一序列数目不定的指针参数,存储读取的数据。

(3)示例
将上述例子中的 fgets() 替换为 fscanf() 函数。

int main()
{FILE *f;f = fopen("test_log", "r");if (f ==NULL)printf("file open failed.\r\n");char data[200] = {0};// fgets(data, 100, f);fscanf(f, "%s", data);printf("%s\r\n", data);fclose(f);return 0;
}

输出结果:

this

使用 fscanf() 读取时,遇到空格就停止了,可以使用以下方式逐个提取。

int main()
{FILE *f;f = fopen("test_log", "r");if (f ==NULL)printf("file open failed.\r\n");char str1[100], str2[100], str3[100], str4[100];fscanf(f, "%s %s %s %s", str1, str2, str3, str4);printf("%s %s %s %s\r\n", str1, str2, str3, str4);fclose(f);return 0;
}

输出结果

this is test log.

3. 写入文件

3.1 fputc()

(1)函数功能
写入单个字符: fputc() 把参数 c 的字符值写入到 fp 所指向的输出流中。
如果写入成功,它会返回写入的字符,如果发生错误,则会返回 EOF。
(2)函数原型

int fputc( int c, FILE *fp );

(3)示例

void fputc_test()
{FILE *f;f = fopen("test_log", "a");if (f ==NULL)printf("file open failed.\r\n");fputc('h', f);fclose(f); 
}

3.2 fputs()

(1)函数功能
写入字符串 fputs() 把字符串 s 写入到 fp 所指向的输出流中。
如果写入成功,它会返回一个非负值,如果发生错误,则会返回 EOF。
(2)函数原型

int fputs( const char *s, FILE *fp );

(3)示例

void fputs_test()
{FILE *f;f = fopen("test_log", "a");if (f ==NULL)printf("file open failed.\r\n");char data[] = "puts test.";fputs(data, f);fclose(f); 
}

3.3 fprintf()

(1)函数原型

 int fprintf(FILE *fp,const char *format, ...) 

(2)示例

void fprintf_test()
{FILE *f;f = fopen("test_log", "a");if (f ==NULL)printf("file open failed.\r\n");char data[] = "puts test.\r\n";fprintf(f, "%s", data);fclose(f); 
}

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

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

相关文章

「RISC-V Arch」SBI 规范解读(下)

第六章 定时器扩展(EID #0x54494D45"TIME") 这个定时器扩展取代了遗留定时器扩展(EID #0x00),并遵循 v0.2 中定义的调用规约。 6.1 函数:设置定时器(FID #0) struct sbi…

TensorFlow-Keras - FM、WideAndDeep、DeepFM、DeepFwFM、DeepFmFM 理论与实战

目录 一.引言 二.浅层模型概述 1.LR 2.FM 3.FMM 4.FwFM 5.FmFM 三.常用推荐算法实现 Pre.数据准备 1.FM 2.WideAndDeep 3.DeepFM 4.DeepFwFM 5.DeepFmFM 四.总结 1.函数测试 2.函数效果与复杂度对比[来自FmFM论文] 3.More 一.引言 推荐系统中常见的 CTR 模型…

梯度下降优化器:SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam -> AdamW

目录 1 前言 2 梯度概念 3 一般梯度下降法 4 BGD 5 SGD 6 MBGD 7 Momentum 8 SGDM(SGD with momentum) 9 NAG(Nesterov Accelerated Gradient) 10 AdaGrad 11 RMSProp 12 Adadelta 13 Adam 13 Nadam 14 AdamW 15 Lion(EvoLve…

【C++进阶】一些小知识点

const限定符 用const给字面常量起个名字(标识符),这个标识符就称为标识符常量;因为标识符常量的声明和使用形式很像变量,所以也称常变量。声明方式: const int a 77; const float PI 3.14159f&#xff…

算法设计与分析期末考试复习(二)

分治法 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。最好使子问题的规模大致相同。 分解(Divide):将一个难以直接解决的大问题,分割成一些规模较小的子…

【拿好了!Linux 运维必备的 13 款实用工具!】

​本文介绍几款 Linux 运维比较实用的工具,希望对 Linux 运维人员有所帮助。 查看进程占用带宽情况 – Nethogs Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。 下载: http://sourceforge.net/projects/nethogs/files/ne…

ZYNQ双核处理器独立运行AMP

一、简介多核处理器从多核的结构上是否一致,分为两种基本架构:同构多核架构和异构多核架构。同构多核处理器是指系统中的处理器在结构上是相同的;而异构处理器是指系统中的处理器在结构上是不同的,这些处理器可以是通用处理器&…

pyqt5通过CANoe COM Server来操作CANoe仿真工程

文章目录前言一、COM接口技术二、UI界面设计三、功能实现四、工程运行测试前言 继续学习《CANoe开发从入门到精通》。 今天在《CANoe仿真工程开发》的基础上,开发实现pyqt5应用程序来操控CANoe工程。 一、COM接口技术 COM(Component Object Model&…

vue-cli引入wangEditor、Element,封装可上传附件的富文本编辑器组件(附源代码直接应用,菜单可调整)

关于Element安装引入,请参考我的另一篇文章:vue-cli引入Element Plus(element-ui),修改主题变量,定义全局样式_shawxlee的博客-CSDN博客_chalk variables 1、安装wangeditor npm i wangeditor --savewangE…

【OpenFOAM】-olaFlow-算例10-wavemakerTank

算例路径: olaFlow\tutorials\wavemakerTank 算例描述: 采用 Flap和Piston两种方式的动网格进行造波 学习目标: 了解 olaDyMFlow 的使用;理解动网格使用和参数设置,理解 dynamicMotionSolverFvMesh 参数设置&#xff1…

【华为OD机试模拟题】用 C++ 实现 - 环中最长子串(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

【Linux修炼】14.磁盘结构/文件系统/软硬链接/动静态库

每一个不曾起舞的日子,都是对生命的辜负。 磁盘结构/文件系统/软硬链接/动静态库前言一.磁盘结构1.1 磁盘的物理结构1.2 磁盘的存储结构1.3 磁盘的逻辑结构二.理解文件系统2.1 对IO单位的优化2.2 磁盘分区与分组2.3 分组的管理方法2.4 文件操作三.软硬链接3.1理解硬…

vue手写日历

<template><div class"page">输入月份数字<input v-model"inputVal" type"text"><button click"change">点击</button><ul class"calendar"><li class"header">{{new …

记忆总掉线?这些行为太伤脑!

人体老化过程中&#xff0c;记忆力的衰退不可避免&#xff0c;这种属于“良性”的记忆衰退。但非“良性”的记忆衰退可要重视&#xff0c;很可能是痴呆症的早期征兆。由于各种原因&#xff0c;我们各种熬夜。作息的不规律扰乱大脑神经系统的调节。这种长期慢性损害大脑&#xf…

WebDAV之π-Disk派盘+Cloud Player

Cloud Player 支持WebDAV方式连接π-Disk派盘。 推荐一款云媒体播放器是存储在常见云平台中的内容的通用播放器。 Cloud Player云媒体播放器是存储在常见云平台中的内容的通用播放器,无需将其下载到设备。支持以下云平台:Google Drive、DropBox、One Drive、WebDav等。此外,…

超纯水制备,MB-106UP抛光树脂的技术解析

超纯水&#xff08;Ultrapure water&#xff09;又称UP水&#xff0c;是指电阻率达到18 MΩ*cm&#xff08;25℃&#xff09;的水。这种水中除了水分子外&#xff0c;几乎没有什么杂质&#xff0c;更没有细菌、病毒、含氯二噁英等有机物&#xff0c;当然也没有人体所需的矿物质…

【ArcGIS Pro二次开发】(7):地图(Map)的基本操作

地图是ArcGIS Pro中的基础起点&#xff0c;也是大多数工程的基础。主要用于显示表示空间数据的图层。 一、地图(Map)的基本操作示例 1、获取当前地图 var map MapView.Active.Map; 2、获取一级图层 var lys map.Layers; 用于获取地图中的单一图层&#xff0c;以及图层组…

深入了解Java线程锁(一)

在上一篇《如何保证线程的原子性》中&#xff0c;我们谈到了锁&#xff08;Synchronized&#xff09;&#xff0c; 这次我们就来深入探讨一下Java多线程中的锁。 互斥锁的本质是共享资源。 如上图所示&#xff0c; Thread1访问受保护资源&#xff0c;对其加锁&#xff0c;将…

【GO】k8s 管理系统项目16[前端部分–前端布局]

【GO】k8s 管理系统项目[前端部分–前端布局] 1. 前端布局 2. Layout 2.1 layout src/layout/Layout.vue <template><div class"common-layout"><el-container><el-side width"200">Aside</el-side><el-container>…

CAN总线开发一本全(3) - 微控制器集成的FlexCAN外设

CAN总线开发一本全&#xff08;3&#xff09; - 微控制器集成的FlexCAN外设 苏勇&#xff0c;2023年2月 文章目录CAN总线开发一本全&#xff08;3&#xff09; - 微控制器集成的FlexCAN外设引言硬件外设模块系统概要总线接口单元 - 寄存器清单数据结构 - 消息缓冲区MB初始化过…