c语言:文件操作(2),认识各种文件操作函数

fgets

作用

fgets是C语言标准库中用于从文件中读取字符串的函数。

fgets函数从指定的文件流stream中读取最多n-1个字符,或者直到遇到换行符(包括换行符在内),并将其存储到以str指向的字符数组中。读取的字符串会以null字符\0结尾,因此fgets可以安全地读取包含空格的字符串。

如果成功读取了字符串,则fgets返回str;如果到达文件末尾或者发生错误,它会返回NULL

例如,可以使用fgets函数从文件中逐行读取文本数据,并将每行存储到相应的字符数组中。

格式

char *fgets(char *str, int n, FILE *stream);

用法

我们打开一个名为date.txt的文件,并使用fgets函数从中读取一行数据,然后将其打印到控制台上。fgets函数的第一个参数是目标缓冲区,第二个参数是要读取的最大字符数,第三个参数是文件指针。如果读取成功,fgets会返回一个非空指针,否则返回空指针。

#define  _CRT_SECURE_NO_WARNINGS//fgets
#include<stdio.h>int main()
{FILE* file;char buffer[100];//创建一个存储字符串的数组//打开文件file = fopen("date.txt", "r");if (file == NULL){printf("无法打开文件\n");return 1;}//从文件中读取一行数据if (fgets(buffer, 100, file) != NULL){printf("从文件中读取的内容是:%s", buffer);}else{printf("读取文件失败\n");}//关闭文件fclose(file);return 0;
}

我已经创建好了名为date.txt的文件名,并且写入了如下图的数据。 

运行结果: 


fputs 

作用

fputs是C语言标准库中用于向文件中写入字符串的函数。

fputs函数将以str指向的字符串写入到指定的文件流stream中。如果写入成功,fputs返回非负值;如果发生错误,它返回EOF

fprintffwrite等函数不同,fputs专门用于向文件中写入字符串,而不是格式化的数据或二进制数据。

例如,可以使用fputs函数将一个字符串写入到文件中,或者将一个字符串逐行写入到文件中。

格式

int fputs(const char *str, FILE *stream);

用法

示例中,我将date.txt中的数据拷入到date_copy.txt的文件中去。

#include<stdio.h>int main()
{//声明两个指针变量,一个是源文件,一个是目标文件FILE* source_file, *target_file;char ch;//以只读的方式打开源文件date.txtsource_file = fopen("date.txt", "r");if (source_file == NULL){printf("无法打开源文件\n");return 1;}//以只写的方式打开目标文件date_copy.txttarget_file = fopen("date_copy.txt", "w");if (target_file == NULL){printf("无法打开目标文件\n");fclose(source_file);return 1;}//从源文件中读取数据,写入到目标文件中while ((ch = fgetc(source_file)) != EOF){fputc(ch, target_file);}//关闭文件fclose(source_file);fclose(target_file);printf("文件拷贝完成\n");return 0;
}

运行结果:


fscanf

作用

fscanf是C语言标准库中用于从文件中按照指定格式读取数据的函数。

fscanf函数从指定的文件流stream中按照指定的格式字符串format读取数据,并将读取到的数据按照格式转换后存储到对应的变量中。fscanf函数的使用方式与scanf函数类似,只是scanf是从标准输入中读取数据,而fscanf是从文件中读取数据。

fscanf函数返回成功匹配并转换的参数个数,如果没有匹配成功,则返回0。如果发生读取错误或者到达文件末尾,则返回EOF

格式

int fscanf(FILE *stream, const char *format, ...);
fscanf函数从指定的文件流stream中按照指

用法

读取文件中的两个数字,我事先在input文件中放了两个数字68和6。

#include<stdio.h>int main()
{FILE* file = fopen("input.txt", "r");if (file != NULL){int num1, num2;if (fscanf(file, "%d %d", &num1, &num2) == 2){printf("读取的两个整数分别是: %d 和 %d\n", num1, num2);}else{printf("读取文件时发生错误或者已达到文件末尾\n");}fclose(file);}else{printf("无法打开文件\n");}return 0;
}


fprintf

作用

fprintf是C语言标准库中用于向文件中按照指定格式写入数据的函数。

fprintf函数根据指定的格式字符串format将数据按照指定格式写入到指定的文件流stream中。与printf函数类似,fprintf函数可以接受可变数量的参数,根据format字符串中的格式说明符进行格式化输出。

fprintf函数返回成功写入的字符数,如果发生写入错误,则返回负值。

格式

int fprintf(FILE *stream, const char *format, ...);

用法

现在,我想要写入两个%d的数字到output的文件中去。

//fprintf
#include<stdio.h>
int main()
{FILE* file = fopen("output.txt", "w");if (file != NULL){int num1 = 10, num2 = 20;if (fprintf(file, "两个整数分别是:%d 和%d \n", num1, num2) > 0){printf("数据已经成功写入文件\n");}else{printf("写入文件时发生错误\n");}fclose(file);}else{printf("无法打开文件\n");}return 0;
}

运行完成后,我们可以看见两个数字已经写入。


sscanf

作用

sscanf是C语言标准库中用于从字符串中按照指定格式读取数据的函数。

sscanf函数从指定的字符串str中按照指定的格式字符串format读取数据,并将读取到的数据按照格式转换后存储到对应的变量中。sscanf函数的使用方式与scanf函数类似,只是scanf是从标准输入中读取数据,而sscanf是从字符串中读取数据。

sscanf函数返回成功匹配并转换的参数个数,如果没有匹配成功,则返回0。

格式

int sscanf(const char *str, const char *format, ...);

用法 

我现在要从字符串按照指定格式读取出三个不同类型的数据。

//sscanf
#include<stdio.h>
int main()
{char input[] = "35 54.3 hello";int num1;double num2;char str[10];// 从字符串中按照格式"%d %f %s"读取数据if (sscanf(input, "%d %lf %s", &num1, &num2, str) == 3){printf("从字符串中读取的数据分别是:%d, %.2lf, %s\n", num1, num2, str);}else{printf("读取字符串时发生错误\n");}return 0;
}

运行结果


sprintf

作用

sprintf函数是C语言中的一个标准库函数,用于将格式化的数据写入字符串中。

sprintf函数的作用是根据指定的格式化字符串format,将后续的参数按照格式化要求写入到字符数组str中。它的使用方式与printf函数类似,不同之处在于printf函数将输出结果写入到标准输出流(通常是显示器),而sprintf函数将输出结果写入到指定的字符数组中。

格式

int sprintf(char *str, const char *format, ...);

用法

格式化数据

//sprintf
#include <stdio.h>int main() 
{char buffer[100];int num = 123;double value = 45.67;char str[] = "hello";sprintf(buffer, "数字:%d, 浮点数:%.2lf, 字符串:%s", num, value, str);printf("格式化后的字符串:%s\n", buffer);return 0;
}

fseek

作用

fseek函数是C语言标准库中用于移动文件指针位置的函数,它允许程序在文件中定位到指定的位置,从而进行读取或写入操作。

格式

int fseek(FILE *stream, long offset, int origin);

用法

//fseek
#include <stdio.h>int main() 
{FILE* fp = fopen("example.txt", "r");if (fp != NULL) {fseek(fp, 10, SEEK_SET);  // 将文件指针移动到文件开头后的第10个字节处// 进行读取或写入操作fclose(fp);}else {printf("打开文件失败\n");}return 0;
}

ftell

作用

ftell函数是C语言标准库中用于获取文件指针当前位置的函数。它返回当前文件位置指针的偏移量,以字节数表示。

格式

long int ftell(FILE *stream);

用法

读取字节数

#include <stdio.h>int main() 
{FILE* fp = fopen("example.txt", "r");if (fp != NULL) {fseek(fp, 0, SEEK_END);  // 将文件指针移动到文件末尾long int file_size = ftell(fp);  // 获取文件指针当前位置(即文件大小)printf("文件大小为 %ld 字节\n", file_size);fclose(fp);}else {printf("打开文件失败\n");}return 0;
}


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

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

相关文章

12.23C语言 指针

& 地址运算符&#xff0c;用于取地址 /*注释内容*/ //注释一行 *的意思&#xff1a;1.算术运算符 2.用于指针声明int *ptr;表示这个变量是一个指针3.数组元素访问&#xff1a;在数组名后面使用 * 可以表示数组的起始地址。例如&#xff1a; int arr[5] {1, 2, 3, 4, 5…

05. Springboot admin集成Actuator(一)

目录 1、前言 2、Actuator监控端点 2.1、健康检查 2.2、信息端点 2.3、环境信息 2.4、度量指标 2.5、日志文件查看 2.6、追踪信息 2.7、Beans信息 2.8、Mappings信息 3、快速使用 2.1、添加依赖 2.2、添加配置文件 2.3、启动程序 4、自定义端点Endpoint 5、自定…

干洗店预约上门取货小程序与互联网洗鞋店小程序开发制作功能方案

干洗店预约上门取货小程序与互联网洗鞋店小程序开发制作功能方案 一、洗衣洗鞋店小程序功能 1. 预约订单&#xff1a;忙碌时&#xff0c;您可以使用预约功能轻松获取洗衣服务。 2. 在线下单&#xff1a;用户可直接通过小程序在线下单&#xff0c;享受专人上门取货与配送服务。…

Unity2017升级到Unity2018在Window7上输出空异常错误问题

Unity2017升级到Unity2018在Window7上输出空异常错误问题 一、环境Window7二、现象Unity报空异常&#xff08;.NET 4.x Equivalent&#xff09;三、日志四、解决方案第一种解决方案第二种解决方案 一、环境Window7 二、现象Unity报空异常&#xff08;.NET 4.x Equivalent&…

小白入门之安装NodeJS

重生之我在大四学JAVA 第五章 安装NodeJS 如果你在购买我闲鱼的程序&#xff0c;请尽量使用node14版本 修改安装路径 接着傻瓜式NEXT 测试是否安装成功 如果上面没提示版本号&#xff0c;就按照前两章配置环境变量步骤配置下环境变量 设置镜像地址 npm config set re…

基于遗传算法特征选择及单层感知机模型的IMDB电影评论文本分类案例

基于遗传算法特征选择及单层感知机模型的IMDB电影评论文本分类案例 1.数据载入及处理2.感知机模型建立3.模型训练4.遗传算法进行特征选择注意 5.联系我们 1.数据载入及处理 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dat…

【Flutter】黑白图片

一、将图片处理成黑白图片 //第一种方法CachedNetworkImage(imageUrl: imageUrl,width: 80,height: 80,fit: BoxFit.cover,color: Colors.black,//目标颜色colorBlendMode: BlendMode.color,//颜色混合模式)//第二种方法ShaderMask(shaderCallback: (Rect bounds) {return Lin…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)Channel 模块的实现

在这篇文章中虽然实现了能够和多客户端建立连接&#xff0c;并且同时和多个客户端进行通信。 基于多反应堆的高并发服务器【C/C/Reactor】&#xff08;上&#xff09;-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135141316?spm1001.2014.3001.5501但是有…

抖店怎么做?新手又该如何从头开始运营?

我是电商珠珠 抖店发展了将近4年时间&#xff0c;一直都备受关注。第一是因为他的门槛低&#xff0c;第二是他的玩法和传统有所差别&#xff0c;第三就是流量来源渠道比较广。 这一年所立的flag不到最后关头绝对不能倒&#xff0c;所以就会有很多人奔着这几点来尝试做店&…

MATLAB遗传算法工具箱的三种使用方法

MATLAB中有三种调用遗传算法的方式&#xff1a; 一、遗传算法的开源文件 下载“gatbx”压缩包文件&#xff0c;解压后&#xff0c;里面有多个.m文件&#xff0c;可以看到这些文件的编辑日期都是1998年&#xff0c;很古老了。 这些文件包含了遗传算法的基础操作&#xff0c;包含…

ebay倒计时活动攻略,ebay倒计时活动怎么做的?——站斧浏览器

ebay倒计时活动攻略 在ebay上做倒计时活动时&#xff0c;可以参考以下攻略&#xff1a; 制定合理的ebay优惠方案。可以根据消费者的需求和购买习惯&#xff0c;制定不同的优惠方案&#xff0c;例如满减、折扣、赠品等。同时&#xff0c;要保证优惠方案的真实性和公平性&#…

wordpress主题modown v8.81+erphpdown v16.0无限制无授权开心版

修复bug&#xff08;v8.81 2023.03.07&#xff09; 新增文章页正文下面常见问题手风琴模块&#xff0c;可设置显示文章的更新日期而不是发布日期&#xff0c;首页幻灯片支持指定文章、支持一个大图4个小图显示&#xff0c;grid网格列表支持显示简介&#xff0c;前台个人中心里显…

Qt 多线程用法

文章目录 开发平台QThread 类 moveToThreadQtConcurrent::run QFutureWatcherQThreadPool QRunnable 开发平台 项目说明OSwin10 x64Qt6.6compilermsvc2022构建工具cmake QThread 类 moveToThread 写一个简单的例子吧,比较容易理解,方便入门. 也可以看出这种方式,对于线程…

如何使用 Selenium 实现自动化操作?

本篇咱们来谈谈Selenium自动化脚本是如何工作的&#xff0c;以及如何实现一个简单的自动化示例&#xff1b; 一、关于Selenium 1.1、为什么选择它作为web自动化的测试工具&#xff1f; 选择Selenium作为web自动化测试工具的原因&#xff08;面试也许会问&#xff09;&#xff…

NiNNet

目录 一、网络介绍 1、全连接层存在的问题 2、NiN的解决方案(NiN块) 3、NiN架构 4、总结 二、代码实现 1、定义NiN卷积块 2、NiN模型 3、训练模型 一、网络介绍 NiN&#xff08;Network in Network&#xff09;是一种用于图像识别任务的卷积神经网络模型。它由谷歌研究…

【电路笔记】-串联电容器

串联电容器 文章目录 串联电容器1、概述2、示例13、示例34、总结 当电容器以菊花链方式连接在一条线上时&#xff0c;它们就串联在一起。 1、概述 对于串联电容器&#xff0c;流过电容器的充电电流 ( i C i_C iC​ ) 对于所有电容器来说都是相同的&#xff0c;因为它只有一条…

matlab实践(十一):导弹追踪

1.题目 a9.94,x062.06 2.方程 我们有&#xff1a; ( d x d t ) 2 ( d y d t ) 2 w 2 (\frac{\mathrm d\mathrm x}{\mathrm d\mathrm t})^2(\frac{\mathrm d\mathrm y}{\mathrm d\mathrm t})^2\mathrm w^2 (dtdx​)2(dtdy​)2w2 还有导弹始终指向船 ( d x d t d y d t ) …

【快速开发】使用SvelteKit

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

【Mode Management】CanSM详细介绍

目录 1. Introduction and functional overview 2.Dependencies to other modules 3.Functional specification 3.1General requirements 3.2State machine for each CAN network 3.2.1Trigger: PowerOn 3.2.2Trigger: CanSM_Init 3.2.3 Trigger: CanSM_DeInit 3.2.4 …

机器学习 | 概率图模型

见微知著&#xff0c;睹始知终。 见到细微的苗头就能预知事物的发展方向&#xff0c;能透过微小的现象看到事物的本质&#xff0c;推断结论或者结果。 概率模型为机器学习打开了一扇新的大门&#xff0c;将学习的任务转变为计算变量的概率分布。 实际情况中&#xff0c;各个变量…