一、文件打开模式 fopen 第二参数(重中之重,必背)
1. 只读 r
"r"read
- 功能:只读,只能读不能写
- 文件不存在:打开失败,返回 NULL
- 文件存在:从文件开头读取
- 不能修改、新增内容
2. 只写 w
"w"write
- 功能:只写,清空原有内容,从头写
- 文件不存在:新建空白文件
- 文件存在:直接清空全部原有数据(覆盖!)
- 不能读文件
3. 追加 a
"a"append
- 功能:只写,在文件末尾追加内容,不覆盖原有文字
- 文件不存在:新建文件
- 文件存在:光标放在最后,新增内容写末尾
- 不能读
4. 读写组合(带 +,二级高频)
+代表可读可写,区分 r+/w+/a+
"r+"读写 文件必须存在,不清空;可读可写,可修改中间内容"w+"读写 文件不存在新建;存在直接清空;可读可写"a+"读写追加 文件不存在新建;原有内容保留;读从头读,写只能写末尾
5. 二进制标志 b(选择题坑点)
不带 b:文本文件(默认) 带b:二进制文件"rb" "wb" "ab" "rb+" "wb+" "ab+"考点:读写图片、数字、结构体用二进制 b;txt 文本不用 b
速记口诀
r 只读无文件报错;w 只写清空重写;a 只写末尾追加;带 + 都能读;带 b 二进制。
二、文件操作核心函数(输入 / 输出分两类,背参数)
(一)文件输出函数(写文件,把数据存入文件)
fputc(ch, fp)写单个字符:ch 是字符变量,fp 文件指针 等价:把字符 ch 写入 fp 指向文件fputs(str, fp)写字符串:str 字符数组 / 字符串常量 注意:不会自动换行,要手动加\nfprintf(fp, "格式控制", 变量)格式化写入,和 printf 对比:多第一个参数文件指针 fp 例:fprintf(fp,"%d %f",a,b);
(二)文件输入函数(读文件,从文件拿数据到程序)
ch = fgetc(fp)读取单个字符,返回读到字符;读到文件末尾返回EOF(-1)fgets(str, n, fp)读取一行字符串 参数:str 存字符串数组,n 最多读 n-1 个字符,fp 文件指针 读到换行符\n停止,会把\n一起存入数组fscanf(fp, "格式", &变量)格式化读取,对比 scanf:多文件指针 fp 例:fscanf(fp,"%d",&x);
(三)二进制整块读写(结构体必考)
fwrite(地址, 单个大小, 个数, fp)写结构体 / 数组fread(地址, 单个大小, 个数, fp)读结构体 / 数组 参数顺序固定:缓冲区地址 → 单个元素字节数 → 读写数量 → 文件指针
三、文件收尾与判断函数
fclose(fp);关闭文件,必考填空,打开必须关闭feof(fp)判断是否到文件末尾- 未到末尾返回 0;读到末尾返回非 0 易错坑:先读再判断 feof,不能直接判断
- 文件打开标准模板(程序题必背)
FILE *fp; fp = fopen("test.txt","r"); if(fp == NULL) // 判断打开失败 { printf("打开失败"); return 0; } // 读写操作 fclose(fp);四、易混对比考点(选择题高频坑)
1. printf / scanf ↔ fprintf / fscanf
- printf (格式,变量) → fprintf (fp, 格式,变量)
- scanf (格式,& 变量) → fscanf (fp, 格式,& 变量) 唯一区别:文件函数第一个参数是 FILE 指针 fp
2. putchar/getchar ↔ fputc/fgetc
- putchar (ch) 输出到屏幕;fputc (ch,fp) 输出到文件
- ch=getchar () 屏幕读字符;ch=fgetc (fp) 文件读字符
3. puts / gets ↔ fputs / fgets
- puts 自动加换行;fputs 不加换行
- gets 不安全已淘汰,考试只用 fgets
五、r w a r+ w+ a+ 对比表(直接背诵)
表格
| 模式 | 可读 | 可写 | 文件不存在 | 文件存在 | 写入位置 |
|---|---|---|---|---|---|
| r | √ | × | 打开失败 | 保留原文 | 不可写 |
| w | × | √ | 新建 | 清空全部 | 文件开头 |
| a | × | √ | 新建 | 保留原文 | 文件末尾 |
| r+ | √ | √ | 打开失败 | 保留原文 | 任意位置修改 |
| w+ | √ | √ | 新建 | 清空全部 | 开头写 |
| a+ | √ | √ | 新建 | 保留原文 | 读从头,写只能末尾 |
六、高频判断题背诵
- fopen 返回值是 FILE * 类型,打开失败返回 NULL。
- EOF 是文件结束标记,值为 - 1,只能用于文本文件 fgetc 判断。
- "w" 模式打开会直接删除原有全部内容,极易丢数据。
- "a" 追加模式永远不能修改前面已有的内容,只能末尾添加。
- 二进制读写 fread/fwrite 必须搭配 rb wb ab 打开文件。
- 使用完文件必须 fclose,否则数据可能丢失、占用资源。
- fgets 第二个参数 n,最多读取 n-1 个字符,最后一位存 '\0'。
- fputs 不会自动输出换行符,puts 会自动换行。
七、经典填空背题模板
模板 1:读取文件所有字符
FILE *fp; char ch; fp = fopen("1.txt","r"); while( (ch = fgetc(fp)) != EOF ) { putchar(ch); } fclose(fp);模板 2:追加写入字符串
FILE *fp; fp = fopen("test.txt","a"); fputs("hello c\n",fp); fclose(fp);模板 3:格式化读写数字
//写入 fprintf(fp,"%d",100); //读取 int x; fscanf(fp,"%d",&x);模板 4:结构体二进制写入
struct Stu s; FILE *fp=fopen("data.dat","wb"); fwrite(&s,sizeof(struct Stu),1,fp); fclose(fp);人人皆为创造者,共创方能共成长
每个人都是使用者,也是创造者;是数字世界的消费者,更是价值的生产者与分享者。在智能时代的浪潮里,单打独斗的发展模式早已落幕,唯有开放连接、创意共创、利益共享,才能让个体价值汇聚成生态合力,让技术与创意双向奔赴,实现平台与伙伴的快速成长、共赢致远。
原创永久分成,共赴星辰大海
原创创意共创、永久收益分成,是东方仙盟始终坚守的核心理念。我们坚信,每一份原创智慧都值得被尊重与回馈,以永久分成锚定共创初心,让创意者长期享有价值红利,携手万千伙伴向着科技星辰大海笃定前行,拥抱硅基 生命与数字智能交融的未来,共筑跨越时代的数字文明共同体。
东方仙盟:拥抱知识开源,共筑数字新生态
在全球化与数字化浪潮中,东方仙盟始终秉持开放协作、知识共享的理念,积极拥抱开源技术与开放标准。我们相信,唯有打破技术壁垒、汇聚全球智慧,才能真正推动行业的可持续发展。
开源赋能中小商户:通过将前端异常检测、跨系统数据互联等核心能力开源化,东方仙盟为全球中小商户提供了低成本、高可靠的技术解决方案,让更多商家能够平等享受数字转型的红利。
共建行业标准:我们积极参与国际技术社区,与全球开发者、合作伙伴共同制定开放协议 与技术规范,推动跨境零售、文旅、餐饮等多业态的系统互联互通,构建更加公平、高效的数字生态。
知识普惠,共促发展:通过开源社区 、技术文档与培训体系,东方仙盟致力于将前沿技术转化为可落地的行业实践,赋能全球合作伙伴,共同培育创新人才,推动数字经济 的普惠式增长
阿雪技术观
在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者 。无论是分享代码、撰写技术博客,还是参与开源项目 维护改进,每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地,我们携手在此探索硅基 生命,为科技进步添砖加瓦。
Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Don't just be the one reaping all the benefits; step up and be a contributor too. Whether you're tossing out your code snippets , hammering out some tech blogs, or getting your hands dirty with maintaining and sprucing up open - source projects, every little thing you do might just end up being a massive force that pushes tech forward. And guess what? The Eastern FairyAlliance is this awesome place where we all come together. We're gonna team up and explore the whole silicon - based life thing, and in the process, we'll be fueling the growth of technology