首页 > 其他分享 >C语言的那点事第八篇:一场与数据的“约会”C语言中的文件操作

C语言的那点事第八篇:一场与数据的“约会”C语言中的文件操作

时间:2025-01-23 19:30:40浏览次数:3  
标签:文件 格式化 第八篇 约会 C语言 char file printf 数据

C语言中的文件操作:一场与数据的“约会”

在C语言的世界里,文件操作就像是与数据的一场浪漫约会。你得学会邀请数据来赴约(打开文件),和它们愉快地聊天(读写文件),甚至在需要的时候,带它们去不同的地方(文件定位),最后礼貌地告别(关闭文件)。今天,就让我们用幽默风趣的方式,来一场关于C语言文件操作的奇妙之旅。

一、打开文件:给数据发一封邀请函

在C语言中,打开文件就像是给数据发一封邀请函。我们用fopen函数来完成这个任务。fopen函数的原型长这样:

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

这里的filename是文件的名字,mode是打开文件的方式。比如,如果你想创建一个新文件或者覆盖一个旧文件,你可以用"w"模式;如果你想读取一个文件,可以用"r"模式;如果你想又读又写,可以用"r+""w+"模式。

示例代码

FILE *file = fopen("love_letter.txt", "w");
if (file == NULL) {
    printf("哎呀,邀请函没送出去,文件打开失败!\n");
} else {
    printf("邀请函成功送达,文件已打开!\n");
}

二、关闭文件:礼貌地说“再见”

当和数据的约会结束时,别忘了礼貌地说“再见”。fclose函数就是用来关闭文件的,它的原型是:

int fclose(FILE *stream);

如果关闭成功,它会返回0,否则返回一个非零值。

示例代码

if (fclose(file) == 0) {
    printf("再见啦,文件已成功关闭!\n");
} else {
    printf("哎呀,文件关闭失败了!\n");
}

三、文件读写:和数据的“聊天”

和数据聊天有两种方式:格式化读写和非格式化读写。

(一)格式化读写:fprintffscanf

fprintffscanf就像是和数据的“礼貌对话”。

  • fprintf的原型是:

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

它可以把格式化的数据写入文件。

  • fscanf的原型是:

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

它可以从文件中读取格式化的数据。

示例代码

// 写入数据
fprintf(file, "亲爱的,今天天气真好:%d°C\n", 25);

// 读取数据
int temp;
fscanf(file, "亲爱的,今天天气真好:%d°C\n", &temp);
printf("读到的温度是:%d°C\n", temp);

(二)非格式化读写:freadfwrite

如果你和数据的聊天不需要太多格式,可以直接用freadfwrite

  • fwrite的原型是:

size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);

它可以把内存中的数据直接写入文件。

  • fread的原型是:

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);

它可以从文件中直接读取数据到内存。

示例代码

// 写入数据
char data[] = "Hello, World!";
fwrite(data, sizeof(char), strlen(data), file);

// 读取数据
char buffer[100];
fread(buffer, sizeof(char), 100, file);
printf("读到的内容是:%s\n", buffer);

四、文件定位:带数据去不同的地方

有时候,你可能需要在文件中跳到某个特定的位置,这就需要用到fseekftell

  • fseek的原型是:

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

它可以让文件指针跳到指定的位置。

  • ftell的原型是:

long ftell(FILE *stream);

它会告诉你文件指针当前的位置。

示例代码

// 跳到文件开头
fseek(file, 0, SEEK_SET);

// 获取当前文件指针位置
long position = ftell(file);
printf("当前文件指针位置:%ld\n", position);

五、综合示例:一场完整的“约会”

下面是一个综合示例,包含了上述所有知识点:

#include <stdio.h>
#include <string.h>

int main() {
    FILE *file = fopen("love_letter.txt", "w+");
    if (file == NULL) {
        printf("哎呀,邀请函没送出去,文件打开失败!\n");
        return 1;
    }

    // 写入格式化数据
    fprintf(file, "亲爱的,今天天气真好:%d°C\n", 25);

    // 写入非格式化数据
    char data[] = "Hello, World!";
    fwrite(data, sizeof(char), strlen(data), file);

    // 跳到文件开头
    fseek(file, 0, SEEK_SET);

    // 读取格式化数据
    int temp;
    fscanf(file, "亲爱的,今天天气真好:%d°C\n", &temp);
    printf("读到的温度是:%d°C\n", temp);

    // 读取非格式化数据
    char buffer[100];
    fread(buffer, sizeof(char), 100, file);
    printf("读到的内容是:%s\n", buffer);

    // 获取当前文件指针位置
    long position = ftell(file);
    printf("当前文件指针位置:%ld\n", position);

    // 关闭文件
    if (fclose(file) == 0) {
        printf("再见啦,文件已成功关闭!\n");
    } else {
        printf("哎呀,文件关闭失败了!\n");
    }

    return 0;
}

六、总结

通过fopenfclose,我们学会了如何邀请数据来赴约和礼貌地告别;通过fprintffscanffreadfwrite,我们学会了如何和数据愉快地聊天;通过fseekftell,我们学会了如何在文件中自由穿梭。希望这场与数据的“约会”能让你对C语言的文件操作有更深的理解。

最后,别忘了,和数据的每一次约会都是一次学习的机会,祝你在C语言的世界里越走越远!


图表:文件操作流程

功能函数名称作用描述
打开文件fopen邀请数据来赴约
关闭文件fclose礼貌地说“再见”
格式化写入fprintf写入格式化的数据
格式化读取fscanf读取格式化的数据
非格式化写入fwrite写入非格式化的数据
非格式化读取fread读取非格式化的数据
文件定位fseek跳到文件的指定位置
获取位置ftell获取文件指针当前的位置

标签:文件,格式化,第八篇,约会,C语言,char,file,printf,数据
From: https://blog.csdn.net/weixin_74149145/article/details/145327447

相关文章

  • 比特c语言-数组和函数实践:扫雷
      目录游戏分析和设计游戏功能说明游戏界面分析和设计数据结构分析文件结构设计游戏设计思路游戏代码实现游戏扩展游戏分析和设计游戏功能说明使用控制台实现经典扫雷游戏游戏可以通过菜单实现是否退出游戏扫雷棋盘默认为9*9格子默认随机布置10个雷可以进行排查雷如......
  • C语言:位段
    位段的内存分配:1.位段的成员可以是intunsignedintsignedint或者是char(属于整形家族)类型2.位段的空间上是按照需要以4个字节(类型int)或者1个字节(char)的方式来开辟的。3.位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。因此由于......
  • SSMC语言考试系统设计与实现 SSM技术驱动的C语言考试管理系统设计与构建 基于SSM框架
    计算机毕业设计SSMC语言考试系统设计与实现08p76标题 (配套有源码程序mysql数据库论文)本套源码可以先看具体功能演示视频领取,文末有联xi可分享随着信息技术的飞速发展,教育领域也在不断探索如何利用现代技术提升教学效率和质量。传统的纸质考试方式已经难以满足现代教育的......
  • C语言程序设计十大排序—希尔排序
    文章目录1.概念✅2.希尔排序......
  • C语言——前缀和,差分
    前缀和一维前缀和(One-dimensionalprefixsum)所谓一维,实际上就是一维数组,数组元素连续排列就可以看做一维的线,一维前缀和解决的主要问题是一维数组的区间和问题,即给定双指针l,r,求原数[l,r]内的和,利用数学上的数列来解决,即。()构建一维前缀和:由易知至少存在两个数值,所有我......
  • 22. C语言 输入与输出详解
    本章目录:前言1.输入输出的基础概念1.1标准输入输出流1.2输入输出函数2.格式化输出与输入2.1使用`printf()`进行输出示例1:输出字符串示例2:输出整数示例3:输出浮点数2.2使用`scanf()`进行输入示例4:读取整数和字符改进方案:使用`getchar()`清理缓冲......
  • 21. C语言 `typedef`:类型重命名
    本章目录:前言1.什么是`typedef`?语法示例:基本类型的别名2.`typedef`为结构体定义别名示例:为结构体定义别名3.`typedef`vs`#define`:两者的区别(1)**作用范围和处理方式**(2)**类型别名的处理**(3)**多个变量的声明**(4)**宏展开与编译器处理**4.`typedef`......
  • 20. C语言 位域(Bit-field)
    本章目录:前言什么是位域?如何定义位域?示例位域的内存分配位域的使用场景节省内存网络协议文件解析位域的限制位域的常见错误进阶示例:位域与指针总结前言在C语言中,位域(Bit-field)是一种特殊的结构体成员,它允许我们按位定义成员的大小。这对于存储具有明确大小限制......
  • C语言的循环结构
    循环结构是编程语言中的一种重要结构,用于重复执行一段代码。主要有三种循环结构:for循环,while循环和do-while循环。循环结构(1)当型循环结构:当条件P成立(为真)时,反复执行循环语句,直到条件P不成立(为假)时结束循环。(条件成立,才执行循环语句,for、while)(2)直到型循环结构:先......
  • C语言/C++——递归、递推、动态规划
    什么是动态规划:给定一个问题,我们把他拆成一个个子问题,直到子问题可以直接解决。然后把子问题的答案保存起来,以减少重复计算。再根据子问题的答案反推,得出原问题解的一种方法递归的过程:"递"的过程是分解子问题的过程;(dfs是第归的一种)            “归......