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.hqwc.cn/news/294465.html

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

相关文章

硬核实战!mysql 错误操作整个表全部数据后如何恢复?附解决过程、思路(百万行SQL,通过binlog日志恢复)

mysql 错误操作整个表全部数据后如何恢复&#xff1f;&#xff08;百万行SQL&#xff0c;通过binlog日志恢复&#xff09; 事件起因 事情起因&#xff1a;以为某个表里的数据都是系统配置的数据&#xff0c;没有用户数据&#xff0c;一个字段需要覆盖替换为新的url链接&#x…

6. 行为模式 - 观察者模式

亦称&#xff1a; 事件订阅者、监听者、Event-Subscriber、Listener、Observer 意图 观察者模式是一种行为设计模式&#xff0c; 允许你定义一种订阅机制&#xff0c; 可在对象事件发生时通知多个 “观察” 该对象的其他对象。 问题 假如你有两种类型的对象&#xff1a; ​ 顾…

【Earth Engine】协同Sentinel-1/2使用随机森林回归实现高分辨率相对财富(贫困)制图

目录 1 简介与摘要2 思路3 效果预览4 代码思路5 完整代码6 后记 1 简介与摘要 最近在做一些课题&#xff0c;需要使用Sentinel-1/2进行机器学习制图。 然后想着总结一下相关数据和方法&#xff0c;就花半小时写了个代码。 然后再花半小时写下这篇博客记录一下。 因为基于多次拍…

浅谈Guava Cache的参数使用

CacheLoader 用于数据加载方式比较固定且统一的场景&#xff0c;在缓存容器创建的时候就需要指定此具体的加载逻辑。通常开发中使用时我们需要继承CacheLoader类或写一个匿名实现类实现其load方法和reload方法 load方法 当执行get操作没有命中缓存或者判断缓存已经超出expir…

NiNNet

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

Linux学习小结

目录结构 tree -L 1 / # /root #root用户的家目录 /home #存储普通用户家目录 lostfound #这个目录平时是空的&#xff0c;存储系统非正常关机而留下“无家可归”的文件 /usr #系统文件&#xff0c;相当于C:\Windows /usr/local #软件安装的目录&#xff0c;相当于C:\Progra…

跨境电商独立站深度分析演示网站

对于跨境电商卖家来说&#xff0c;多平台、多站点的布局是非常重要的战略。这样做可以规避”鸡蛋放在同一个篮子里”的风险也能够追求更高的销售额和利润。同时&#xff0c;市场的变化也带来了新的发展机会&#xff0c;因此很多出海企业都希望抓住独立站的新机遇&#xff0c;抢…

【华为数据之道学习笔记】6-4 打造数据供应的“三个1”

数据服务改变了传统的数据集成方式&#xff0c;所有数据都通过服务对外提供&#xff0c;用户不再直接集成数据&#xff0c;而是通过服务获取。因此&#xff0c;数据服务应该拉动数据供应链条的各个节点&#xff0c;以方便用户能准确地获取数据为重要目标。 数据供应到消费的完整…

【Linux笔记】文件和目录操作

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux学习 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 命令 ls (List): pwd (Print Working Directory): cp (Copy): mv (Move): rm (Remove): 结语 我的其他博客 前言 学习Linux命令…

开发知识点-HTML/JavaScript

HTML/JavaScript xlinksvgviewBoxuse基础预热与语法基础知识js 如何运行页面适用js 及输出 面向对象抽奖功能 json 支持 字符串转数组数组转字符串数组元素删除长度0位添加一个元素// 表示在下标为1处添加一项tttarray.splice(1,0,ttt)//[123,ttt,456]// 数组是否包含某个元素a…

PIC单片机项目(8)——基于PIC16F877A的温度光照检测装置的protues仿真

1.功能设计 使用PIC16F877A单片机&#xff0c;进行温度检测、光照检测。温度使用的是DS18B20&#xff0c;光照检测直接利用的AD转换。 光照太暗就开灯&#xff0c;温度太高就开风扇。温度阈值和光照阈值都实时显示在LCD1602屏幕上面。 完成了protues仿真。文件里面包含代码和仿…

blender径向渐变材质-着色编辑器

要点&#xff1a; 1、用纹理坐标中的物体输出连接映射中的矢量输入 2、物体选择一个空坐标&#xff0c;将空坐标延z轴上移一段距离 3、空坐标的大小要缩放到和要添加材质的物体大小保持一致