文件操作以及相关的函数,fputc,fgetc,fputs,fgtes,fprintf,fscanf,sprintf,sscanf

这篇具有很好参考价值的文章主要介绍了文件操作以及相关的函数,fputc,fgetc,fputs,fgtes,fprintf,fscanf,sprintf,sscanf。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

🐰文件操作

🌸打开文件

🏡文件的顺序读写

🌸fputc字符输入函数(适合所有输入流)

🌸fgetc(适合所有的输出流)

🌸fputs(适合所有的输入流)

🌸fgets(适合所有的输出流)

🏡格式化的读写

🌸fprintf(适合所有的输入流)

🌸fscanf读取文件(适合所有的输出流)

🏡流

🌸屏幕这个流(stdout)输出

🏡对比:printf/fprintf/sprintf和scanf/fscanf/sscanf

🌸sprintf(把格式化数据转换成字符串)

🌸sscanf(把字符串转换成相应格式化数据)


🐰文件操作

程序文件:后缀为 .c,.cpp,.exe等

数据文件:后缀为 .txt,.doc等

文件名包含三个部分:文件路径+文件名主干+文件后缀

例如:c:\code\tsest.txt

文件操作以及相关的函数,fputc,fgetc,fputs,fgtes,fprintf,fscanf,sprintf,sscanf

 

文件的操作:

文件的打开

文件操作(读或写)

文件的关闭

🌸文件指针

缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的。取名为FILE

文件操作以及相关的函数,fputc,fgetc,fputs,fgtes,fprintf,fscanf,sprintf,sscanf

 

注意:不同的c编译器的FILE类型包含的内容的不完全相同

每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE变量,并填充其中的信息

一般都是通过一个FILE的指针来维护这个FILE结构的变量。

创建一个FILE*的指针变量

FILE* pf;//文件指针变量

注意:通过文件指针变量可以访问与它关联的文件

🌸打开文件

ASICN规定使用fopen函数来打开文件,fclose来关闭文件

fopen的原型:

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

const char * filename:文件名

const char * mode:打开方式

注意:如果打开成功,打开失败返回空指针

常见打开方式有:

"r":读

"w":写

"a":追加

"r+":可以读,可以更新

"w+":可以写,可以更新

"a+":可以追加,可以更新

创建一个文件指针去向文件中写入数据

#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<stdlib.h>
int main()
{
    //打开文件
    FILE* pf=fopen("test.txt", "w");
    if(pf==NULL)
    {
        //printf("%s\n",strerror(errno));
        perror("fopen");//如果打开失败打印原因
        return 1;
    }
    //写文件
    //关闭文件
    fclose(pf);
    pf=NULL;
    system("pwd");
    return 0;
}

🏡文件的顺序读写

🌸fputc字符输入函数(适合所有输入流)

fputc向文件写数据

fputc的原型:

int fputc ( int character, FILE * stream );

int character:写的单个字符

FILE * stream:文件相关联的文件指针

#include<stdio.h>
int main()
{
    FILE* pf=fopen("test.txt", "w");
    //写文件
    //把26个字母写到文件中
    //fputc('a',pf);
    for(int i=0;i<26;i++)
    {
        fputc('a'+i,pf);
    }
    //关闭文件
    fclose(pf);
    pf=NULL;
    return 0;
}

🌸fgetc(适合所有的输出流)

fgetc的原型:

int fgetc ( FILE * stream );

FILE * stream :文件相关联的文件指针

返回的是ASCII码值

fgetc读取一个字符时,文件指针的位置会往后移动(注意这里的文件指针不是自己创建的那个(pf)而是系统自带的文件指针)

fgetc如果读取失败或则读取完成时,会返回一个EOF

#include<stdio.h>
int main()
{
    FILE* pf=fopen("test.txt", "r");
    //写文件
    //从文件中读取26字母字符
    for(int i=0;i<26;i++)
    {
        int ch=fgetc(pf);
        printf("%c ",ch);
    }
    //关闭文件
    fclose(pf);
    pf=NULL;
    return 0;
}

🌸fputs(适合所有的输入流)

fputs的原型:

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

const char * str:写入的字符串

FILE * stream :文件相关联的文件指针

如果写入成功返回非负数,写入失败返回EOF

#include<stdio.h>
int main()
{
    FILE* pf=fopen("test.txt", "w");
    //写文件
    //写一行数据,"hello bit"
    fputs("hello bit\n",pf);//加入'\0'可以给每次写入数据换行,如果不写'\0'不会自动换行
    fputs("hello world\n",pf);
    //关闭文件
    fclose(pf);
    pf=NULL;
    return 0;
}

🌸fgets(适合所有的输出流)

fgets的原型:

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

char * str:存放读取字符的空间

int num:读取字符的个数

FILE * stream:相关联的文件指针

最多读取num-1个字符,因为第num个字符要存放'\0'

#include<stdio.h>
int main()
{
    FILE* pf=fopen("test.txt", "r");
    //写文件
    //从文件中读取数据
    char str[20];
    fgets(str, 5, pf);
    printf("%s\n",str);
    //关闭文件
    fclose(pf);
    pf=NULL;
    return 0;
}

🏡格式化的读写

🌸fprintf(适合所有的输入流)

fprintf的原型:

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

和printf一样,只是添加了一个流,FILE * stream

#include<stdio.h>
typedef struct S
{
    int n;
    float f;
    char arr[20];
}S;
int main()
{
    S s1={100,3.14,"zhnagsan"};
    //打开文件
    FILE* pf=fopen("test.txt","w");
    //写文件
    fprintf(pf,"%d %lf %s",s1.n,s1.f,s1.arr);
    //关闭文件
    fclose(pf);
    pf=NULL;
    return 0;
}

🌸fscanf读取文件(适合所有的输出流)

fscanf的原型:

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

和scanf一样,只是添加了一个流,FILE * stream

#include<stdio.h>
typedef struct S
{
    int n;
    float f;
    char arr[20];
}S;
int main()
{
    S s1={0};
    //打开文件
    FILE* pf=fopen("test.txt","r");
    //写文件
    fscanf(pf, "%d %f %s",&s1.n,&s1.f,s1.arr);
    printf("%d %f %s",s1.n,s1.f,s1.arr);
    //关闭文件
    fclose(pf);
    pf=NULL;
    return 0;
}

🏡流

读写文件的时候:文件流

终端设备->屏幕:标准输出流 stdout

终端键盘->键盘:标准输入流 stdin

终端设备->屏幕:标准错误流 stderr

C程序会默认会打开3个流:stdout,stdin,stderr

🌸从键盘这个流(stdin)读入数据

#include<stdio.h>
int main()
{
    char arr[20]={0};
    fgets(arr,9,stdin);
    printf("%s",arr);
    return 0;
}

🌸屏幕这个流(stdout)输出

#include<stdio.h>
typedef struct S
{
    int n;
    float f;
    char arr[20];
}S;
int main()
{
    S s1={0};
    fscanf(stdin,"%d %f %s",&s1.n,&s1.f,s1.arr);
    fprintf(stdout,"%d %f %s",s1.n,s1.f,s1.arr);
    return 0;
}

🏡对比:printf/fprintf/sprintf和scanf/fscanf/sscanf

sacnf 针对标准输入流(stdin)的格式化的输入函数

printf针对标准输出流(stdout)的格式化的输入函数

fscanf针对所有的输入流(文件流/stdin)的格式化的输入函数

fprintf针对所有的输出流(文件流/stdout)的格式化的输入函数

sscanf/sprintf

🌸sprintf(把格式化数据转换成字符串)

sprintf的原型:

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

char * str:存放转化后的字符串的空间

const char * format, ...:格式化的数据,'...'是可变参数,因此可以是多个格式化的数据

🌸sscanf(把字符串转换成相应格式化数据)

sscanf的原型:

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

char * str:存放转化后的字符串的空间

const char * format, ...:格式化的数据,'...'是可变参数,因此可以是多个格式化的数据

#include<stdio.h>
typedef struct S
{
    int n;
    float f;
    char arr[20];
}S;
int main()
{
    S s1={200,3.5f,"wangwu"};
    //把一个结构体转化成字符串
    char arr[200]={0};
    sprintf(arr,"%d %f %s",s1.n,s1.f,s1.arr);
    printf("%s",arr);

    //把一个字符串转化为对应格式数据
    S s2={0};
    sscanf(arr, "%d %f %s",&s2.n,&s2.f,s2.arr);
    printf("%d %f %s",s2.n,s2.f,s2.arr);
    return 0;
}

 🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸  文章来源地址https://www.toymoban.com/news/detail-444407.html

到了这里,关于文件操作以及相关的函数,fputc,fgetc,fputs,fgtes,fprintf,fscanf,sprintf,sscanf的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【正点原子STM32】SYSTEM文件夹介绍(sys文件夹、deley文件夹、USART 文件夹、SysTick、printf函数、fputc函数、半主机模式)

    一、sys文件夹介绍 二、deley文件夹介绍 2.1、deley文件夹函数简介 2.2、SysTick工作原理 2.3、SysTick寄存器介绍 2.4、delay_init()函数 2.5、delay_us()函数 2.6、delay_ms()函数 三、USART 文件夹介绍 3.1、printf函数输出流程 3.2、printf的使用 3.3、printf函数支持 半主机模式简介 方法一:微库法

    2024年03月11日
    浏览(56)
  • fgets函数和fputs函数

    橙色 fgets 比 gets 安全,使用 gets 编译时会警告。所以不要使用 gets ! 原因:函数 gets 可以 无限读取 ,不会判断上限,所以程序员应该确保 buffer 的空间足够大,以便在执行读操作时不发生溢出。也就是说,gets 函数并不检查缓冲区 buffer 的空间大小,事实上它也无法检查缓冲

    2024年01月18日
    浏览(22)
  • Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明

    目录 Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明 一、简单介绍 二、安装文件相关说明 三、界面的简单说明 四、prompt 的一些语法简单说明 1、Prompt :正向提示词 ,用文字描述在图像中出现的内容 2、Negative prompt:负面提示词,用文字描述不想在图像中出现

    2024年02月09日
    浏览(28)
  • 【C++】STL 算法 ① ( STL 算法相关头文件 | 函数对象 / 仿函数 简介 | 函数调用操作符 | 重写函数调用操作符的类 | 函数对象 与 普通函数区别 )

    标准模板库 STL 算法 都定义在 algorithm , numeric 和 functional 三个头文件中 ; 使用 STL 标准模板库 算法时 , 导入上述 3 个头文件 , 导入时根据需求导入即可 , 不必都导入 ; algorithm 头文件 是 3 个 STL 算法头文件中 包含算法最多的一个 , 包含常用的 : 比较算法、交换算法、查找算法

    2024年01月16日
    浏览(44)
  • Node.js-fs模块文件创建、删除、重命名、文件内容的写入、读取以及文件夹的相关操作

    异步写入:writeFile() 同步写入:writeFileSync() 异步追加写入:appendFile() 同步追加写入:appendFileSync() 方式一(appendFile): 方式二(writeFile): fs.createWriteStream( path [, options ] ) 程序打开一个文件是需要消耗资源的 ,流式写入可以减少打开关闭文件的次数。 流式写入方式适用于

    2024年02月14日
    浏览(59)
  • 互相关函数以及Matlab仿真

    互相关函数是用于衡量两个信号之间的相似程度的一种方法。在信号处理领域中,互相关函数被广泛应用于模式识别、语音处理等领域。它可以帮助我们分析两个信号之间的关系,从而找到它们之间的相似性。 互相关函数的计算方法 在信号处理中,互相关函数通常被表示为

    2024年02月09日
    浏览(29)
  • ElementUI简介以及相关操作

    ElementUI是一套基于Vue.js的桌面端组件库,提供了丰富的组件帮助开发人员快速构建功能强大、风格统一的页面。以下是ElementUI的简介以及相关操作: 简介:ElementUI是一套为开发者、设计师和产品经理准备的基于Vue 2.0的桌面端组件库,旨在快速构建页面。它提供了丰富的组件

    2024年01月23日
    浏览(21)
  • ES语法以及ajax相关操作

    ajax一个前后台配合的技术,它可以让javascript发送http请求,与后台通信,获取数据和信息。ajax技术的原理是实例化xmlhttp对象,使用此对象与后台通信。jquery将它封装成了一个函数$.ajax(),我们可以直接用这个函数来执行ajax请求。 ajax需要在服务器环境下运行。 $.ajax使用方法

    2024年02月08日
    浏览(26)
  • Redis五大数据类型以及相关操作

    keys * 查看当前库的所有键 exists key 判断某个键是否存在 type key 查看键的类型 del key 删除某个键 expire key seconds 为键值设置过期时间,单位秒 ttl key 查看还有多久过期,-1表示永不过期,-2表示已过期 dbsize 查看当前数据库中key的数量 flushdb 清空当前库 Flushall 通杀全部库 String类型

    2024年02月02日
    浏览(29)
  • Ajax--》请求操作以及跨域相关讲解

    目录 jQuery中的Ajax 请求超时与网络异常处理 取消请求 Ajax请求—fetch() 跨域 jQuery中的Ajax 在jQuery中应该如何发送Ajax请求呢?看到这篇文章你就能大概了解到如何在jQuery中发送Ajax。 要想使用jQuery框架,肯定是需要引进jQuery资源的,有两种方式,一种是将资源下载到本地,另一

    2024年01月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包