【C语言】文件操作函数代码示例。

时间:2023-02-07 18:58:18

????write in front????   

????大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流????

????2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~2022博客之星Top63~作者周榜84﹣作者总榜704~阿里云专家博主 & 阿里云星级博主~掘金优秀创作者⇿InfoQ创作者⇿51CTO红人⇿全网访问量50w+????

????本文由 謓泽 原创 如需转载还请通知⚠

????个人主页-​謓泽51Ctop的博客​????

????欢迎各位→点赞???? + 收藏⭐️ + 留言????

????系列专栏-​謓泽51Ctop的博客_【C语言】从0~1_51CTO博客​????
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本????​

????????????文件操作函数代码示例????????​​​​​​​????

???????? fgetc() 代码示例​​​​​​​????????

那么与之相反的 fgetc() 就适合与输入流,那么我们这次就用"r"进行读文件,本身也是用这个来进行读文件的。代码示例如下↓

【C语言】文件操作函数代码示例。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
FILE* pf = fopen("test.txt", "r");
//返回值判断
if (pf == NULL)
{
perror("fopen");
return 1;//返回
}
//读文件
for (int i = 0; i < 10; i++)
{
int ret = fgetc(pf);
printf("%c", ret);
}
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}

【C语言】文件操作函数代码示例。

聪明的小伙伴想到了没有,多个直接用循环即可。但是????fgetc()????必须要包含到循环。 

运行结果????

Cyuyanyyds,注意:这里我们的 test.txt 文件是 Cyuyanyyds。

单个直接这样即可(☆-v-),张三你明白了没。张三:属实get到了(ノ*・ω・)ノ



int ret = fgetc(pf); printf("%c", ret);【C语言】文件操作函数代码示例。


????????fputs() 写入"字符串"????????

当然还有些函数例如下↓

fputs() → 可以写入文件按照一行进行写入"字符串" 。



fputs("Cyuyan\n",pf); fputs("ttdyyyds\n",pf);【C语言】文件操作函数代码示例。



改变下这个以及写入的是写入是 "w" 即可 !( •̀ .̫ •́ )✧

【C语言】文件操作函数代码示例。

【C语言】文件操作函数代码示例。

​编辑

从这里我们可以发现成功了,成功的写入进去了并且是以"字符串"的形式来写入进去的。 

还是写下代码吧。ヾ(≧▽≦*)o



#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main(void) { char arr[10] = { 0 }; FILE* pf = fopen("test.txt", "w"); //返回值判断 if (pf == NULL) { perror("fopen"); return 1;//返回 } //写文件 fputs("Cyuyan\n", pf); fputs("ttdyyyds\n", pf); //关闭文件 fclose(pf); pf = NULL; return 0; }【C语言】文件操作函数代码示例。



????????fgets()从流中获读取"字符串" ????????

fgets() → 从流中获读取"字符串"。

????fgets() 函数声明方式如下↓



char * fgets ( char * str, int num, FILE * stream );【C语言】文件操作函数代码示例。



  • str→指向一个字符数组的指针,在这个数组中,读取的字符串将被复制。
  • num → 在这里复制到str的最大字符数(包括结束的空字符),这个 num 是要 - 1的。当你输入的是4,那么它的这个实际上只会获取3个字符。
  • stream → 指向标识输入流的FILE对象的指针。Stdin可以作为从标准输入中读取的参数。



#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main(void) { char arr[10] = { 0 }; FILE* pf = fopen("test.txt", "r"); //返回值判断 if (pf == NULL) { perror("fopen"); return 1;//返回 } //读文件 fgets(arr, 7, pf); printf("%s\n",arr); //关闭文件 fclose(pf); pf = NULL; return 0; }【C语言】文件操作函数代码示例。



运行结果????

Cyuyan

【C语言】文件操作函数代码示例。

从这里我们可以看出只有六个字符,所以我们可以看出 num - 1 的,最多只能读六个要留'\0'的一个位置。 

????????fprintf()格式化输出函数????????

????fprintf() 函数声明方式如下↓



int fprintf ( FILE * stream, const char * format, ... );【C语言】文件操作函数代码示例。



将由format指向的C语言字符串写入流。如果format包含格式说明符(以%开头的子序列)

那么format后面的附加参数将被格式化并插入到结果字符串中,替换它们各自的说明符。

format形参之后,函数期望的附加参数至少与format所指定的相同。

  • 参数如下↓

stream→指向标识输出流的FILE对象的指针。

format→包含要写入流的文本的C字符串。它可以选择性地包含嵌入的格式说明符,这些格式说明符将被后续附加参数中指定的值所替换,并按照请求进行格式化。

介绍完 ????fprintf()????让我们来用代码示例讲解下,如何写入一个结构体文件 放在 test.txt 文件上。

代码示例如下↓

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
struct student
{
char name[20];//学生名字
char sex[5];//学生性别
char id[20];//学生学号
int age;//学生年龄
};
int main(void)
{
struct student s = { "zhangsan", "nan", "10", 18 };
FILE* pf = fopen("test.txt", "w");
//返回值判断
if (pf == NULL)
{
perror("fopen");
return 1;//返回
}
//写文件
fprintf(pf,"%s %s %s %d",s.name, s.sex, s.id, s.age);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}

【C语言】文件操作函数代码示例。

【C语言】文件操作函数代码示例。

从上述截屏当中我们成功的用 ????fprintf()???? 进行了格式化输出(*^-^*)

张三:你该不会是自己加上去的吧(doge~),我:????????????

当然,如果你要达到换行的效果也是可以的加在'\n'换行符即可。

????????fscanf()格式化输入函数????????

如果你会用上面的格式化输出函数,那么这个函数也就会了。

????fscanf()​​​​​​​ 函数声明方式如下↓



int fscanf ( FILE * stream, const char * format, ... );【C语言】文件操作函数代码示例。



从流中读取格式化数据。

从流中读取数据,并根据参数格式将其存储到附加参数所指向的位置。附加的参数应该指向已经分配的对象,其类型由格式字符串中相应的格式说明符指定。

  • 参数如下↓

stream→指向FILE对象的指针,该对象标识要从中读取数据的输入流。

format→C语言当中的字符串,包含一个字符序列,控制如何处理从流中提取的字符.....

那么现在我们进行读文件。示例代码如下↓

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
struct student
{
char name[20];//学生名字
char sex[5];//学生性别
char id[20];//学生学号
int age;//学生年龄
};
int main(void)
{
struct student s = {"张三","你好","嗯",886};
FILE* pf = fopen("test.txt", "r");
//返回值判断
if (pf == NULL)
{
perror("fopen");
return 1;//返回
}
//读文件
fscanf(pf,"%s %s %s %d",s.name,s.sex,s.id,&(s.age));

//打印
printf("%s %s %s %d", s.name, s.sex, s.id, s.age);

//关闭文件
fclose(pf);
pf = NULL;
return 0;
}

【C语言】文件操作函数代码示例。

【C语言】文件操作函数代码示例。

成功写入进去结构体当中的结构体类型的值\^o^/ 



//读文件 scanf(stdin,"%s %s %s %d",s.name,s.sex,s.id,&(s.age)); //打印 fprintf(stdout,"%s %s %s %d", s.name, s.sex, s.id, s.age);【C语言】文件操作函数代码示例。



如果你是这个样子实际上也是没有任何问题的,本质上f无论是输出还是输入都和没有的差不多知识把相对应的东西改下就可以了意思是一样的。

我再把这三个流放在下面怕各位同学还要上去找(o゚v゚)ノ

  • stdin → 标准输入流 → 键盘
  • stdout → 标准输入流 → 屏幕
  • stderr → 标准错误流 → 屏幕