C语言 文件的读写

引入

OS操作系统
在这里插入图片描述

打开文件fopen()函数

读写模式:
r:读取已有文件
w:文件不存在,创建文件并写入文件.文件存在,内容清零,再写入文件
a: 文件不存在,创建文件并写入文件.文件存在,以追加的形式写入文件

r+:读写已有文件
w+:文件不存在,创建文件并读写文件.文件存在,内容清零,再读写文件
a+:文件不存在,创建文件并读写文件.文件存在,以追加的形式写文件,从头开始读文件

总结:
1)
r,r+已有文件
w,w+,a,a+:已有文件+创建文件
2)如果是二进制文件,要在后面加一个b
3)以w,w+模式会将文件清空

在这里插入图片描述

关闭文件fclose()函数

关闭成功,返回0
关闭失败,返回EOF
总结:
1)
EOF:C标准函数库中表示文件结束符(end of file)
在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。
2)如果不关闭文件,我们的内容就没有保存在文件中

在这里插入图片描述

写入文件的函数

输出流

fputc()写入一个字符,成功:返回写入的字符,失败:返回EOF
fputs()写入一个字符串,成功:返回一个非负值,失败:EOF
fprintf()写入一个字符串, 成功:返回写入的字符的个数,失败:返回负数

在这里插入图片描述
案例
库变量:
FILE:一个适合存储文件流信息的对象类型
在这里插入图片描述

代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//写入文件--fputc(),fputs(),fprintf()
int main()
{printf("1.创建文件空指针\n");FILE *fp=NULL;printf("2.创建一个文件\n");/*d:/与平时的转义字符\相反*/fp=fopen("d:/AAADQLearning/test_file.txt","a");//w写入文件,存在,清零;不存在,创建//a写入文件,存在,追加;不存在,创建printf("3.fputc写入一个字符a\n");char rc=fputc('m',fp);//成功,返回写入的字符,失败,返回EOFfputc('\n',fp);printf("4.fputs写入一个字符串\n");int rs=fputs("dq,as a result\n",fp);//成功,返回0,失败返回EOFprintf("5.fprintf写入一个字符串\n");int rf=fprintf(fp,"as good as\n");//成功,返回传入的字符个数;失败,返回负数printf("rc=%c rs=%d rf=%d\n",rc,rs,rf);//m 0 11printf("写入完成!\n");printf("关闭文件指针\n");fclose(fp);getchar();return 0;
}

读取文件的函数

fgetc()读取一个字符,成功,返回读取的字符,失败,返回EOF
fgets()读取n-1字符串, 成功时返回字符串地址,错误或0读入时返回NULL
fscanf()读取字符串, 成功,返回正确读入项目(items)的个数,错误时返回EOF
总结:
1)
fgets()读取n-1个字符,把字符串复制给缓冲区,在末尾追加一个null
fscanf()读取时遇到空格符会停止读取,直接返回目前读到的结果

在这里插入图片描述
案例
1)案例1
在这里插入图片描述
2)案例2
在这里插入图片描述

读取文件代码
代码1

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//读取文件--fgetc(),fgets(),fscanf()
//输入流
int main()
{//创建文件指针FILE *fp=NULL;fp=fopen("D:/AAADQLearning/test_file.txt","r+");//r:读取已有文件r+读写已有文件char buff[1024];//使用缓冲区装读取到的字符char rc=fgetc(fp);char *rs=fgets(buff,sizeof(buff),fp);//读取1024个字符,字符串一行一行地读取char *temp="";int rf=fscanf(fp,temp);//fscanf()遇到换行符了,所以什么也没读取到就返回了strcat(buff,temp);/*fgetc()成功:返回读取到的字符,失败,返回EOFfgets()成功:返回读取到的字符串(地址),失败,返回NULLfscanf()成功,返回成功读取的个数,失败,返回EOF*/printf("rc=%c rs=%s rf=%d\n",rc,rs,rf);printf("读取的内容:\nbuff=%s\n",buff);fclose(fp);//关闭文件指针printf("读取完成!\n");getchar();return 0;
}

代码2

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//循环读取文件--fgetc(),fgets(),fscanf()
//输入流
int main()
{//创建文件指针FILE *fp=NULL;fp=fopen("D:/AAADQLearning/test_file.txt","r+");//r:读取已有文件r+读写已有文件char buff1[1024];//使用缓冲区装读取到的字符char buff2[1024];//使用fgets()循环一行行地读取文件printf("fgets():\n");while(fgets(buff1,1024,fp)!=NULL)//只有这样才行{//输出缓冲区中的内容printf("%s",buff1);}//使用fscanf()循环一行行地读取文件printf("fscanf():\n");//fscanf()遇到空格和换行时结束//所以fscanf(fp,"%s",buff2)!=EOF//表示遇到空格符或换行时,结束这一个循环,直接进行下一个循环,从没有空格和换行符的地方读取//最终输出:没有空格与换行,直接输出一行很长的字符串while(fscanf(fp,"%s",buff2)!=EOF){printf("%s",buff2);}//使用fgetc()循环地读取文件printf("fgetc():\n");//fgetc()会一个字符一个字符地输出,最终输出所有内容while(fgetc(fp)!=EOF){printf("%c",fgetc(fp));}fclose(fp);//关闭文件指针printf("读取完成!\n");getchar();return 0;
}

读写文件综合代码

#include<stdio.h>
#include<stdlib.h>
//文件--读写文件综合
const int size=100;
int main()
{//写文件--输出流FILE *fpw=NULL;fpw=fopen("D:/AAADQLearning/test_write.txt","a+");//写文件int i;for(i=0;i<100;i++){fprintf(fpw,"arr[%d]\n",i);}printf("完成写入!\n");//读文件--输入流FILE*fpr=NULL;fpr=fopen("D:/AAADQLearning/test_file.txt","r+");//读文件char buff[1024];while(fgets(buff,1024,fpr)!=NULL){//把读取到的文件内容追加到test_write.txt文件中//输出流fputs(buff,fpw);}printf("读取并写入文件完成!\n");//关闭文件指针fclose(fpr);fclose(fpw);getchar();return 0;
}

补充

1.文件相关的函数使用时返回的结果

fgetc():成功时返回读入的字节数。错误或文件尾时返回EOF;
fputc():成功时返回写入的字节数。错误时返回EOF;
fgets():成功时返回字符串地址,错误或0读入时返回NULL;
fputs():成功时返回一个非负整数,错误时返回EOF
fprintf():成功时返回写入的字节数,错误时返回负数(negative value)
fscanf():返回正确读入项目(items)的个数,错误时返回EOF
fwrite():返回正确写入项目的个数,错误时返回0
fread():返回正确读入项目的个数,错误时返回0
fseek():成功返回0,错误返回-1。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446519.shtml

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

相关文章

StarWind V2V Image Converter:虚拟机镜像转换工具,可将 IMG 文件转换为 VMware VMDK 文件

操作流程 选择本地的需要转换的文件找到源文件的路径&#xff0c;img格式选择转化后的格式 第一个选择 第二个 速度快一些选择将转化后的文件的存储路径软件的下载链接 链接: https://pan.baidu.com/s/1Fe6yI42Zz9d_Q7aUhGe1FQ 提取码: 5vmv

数学建模基础知识

原型与模型 模型的分类 数学建模 数学建模的分类 成为建模大神 数学建模比赛 数学建模一般步骤 数学建模全过程 数学建模论文写作 1&#xff09;摘要:是决定最后获奖等级的关键 2&#xff09;问题重述:使用自己的语言将问题重述一次 3&#xff09;符号说明:对于常见的或…

数学建模 线性规划模型基本原理

线性规划问题 例1.1 可行解&可行域 matlab标准形式及软件求解 标准形式: C称为价值向量 如果是求max,加一个负号-c^T 如果是求Ax>b,加一个负号-Ax<b 使用matlab求线性规划例题 求解的是最大值:加上负号 y是求解的最优解 zeros()使用: zeros(n)&#xff1a;生…

接上文 ,解决 虚拟机VM,U盘(磁盘)装有系统,将其中系统安装到另外一块磁盘的具体操作

问题原因&#xff1a;接上文&#xff0c;将生成的vsdk格式的磁盘导入VM创建镜像&#xff0c;相关于U盘装载系统镜像&#xff0c;将U盘其中的镜像导入到磁盘里边&#xff0c;U盘是引导&#xff0c;会将系统最终装载到磁盘出错原因是因为 没有新建第二块磁盘 解决 新增一块磁盘如…

数学建模 层次分析法

简介 针对多目标,多准则或无结构特性的复杂决策问题 步骤 解决评价类问题 评价类问题: 资料查找: 1)查找相关文献 2)如果没有找到相关文献 3)搜索 通过上述步骤后得到的结果 构建层次结构模型 举例: 成对比较矩阵 标度表: 奇数:越大越重要 偶数:上述两相邻判断的中值…

接上文 VM安装的ubuntu系统,配置双网卡

点击编辑 进入虚拟网络编辑器 点击更改设置 补充&#xff1a;如何判定桥接至哪张网卡&#xff1f;进入win&#xff0c;winr 输入cmd&#xff1b;输入 systeminfo选中系统&#xff0c;点击右键&#xff0c;选中设置 重启系统使用 ifconfig查看&#xff0c;发现有eth0和eth1…

数学建模 趣味数模问题(数模入门)

狼羊人菜渡河问题 解答 试探法 因为有4个变量,所以一共有222*216种状态 找出其中不安全的状态:无人看守的状态下:狼羊一起,羊菜一起 人 狼 羊 菜(0是在对面,1是在这边) 狼羊一起:(0,1,1,0) (0,1,1,1) (1,0,0,0) (1,0,0,1) 羊菜一起:(0,0,1,1) (1,1,0,0) 其余的10个都是安全状态…

数学建模 整数规划的基本原理和标准形式

整数规划模型 变量限制为整数 一般解决运输问题和整数问题 分类: 研究的是纯整数规划问题 整数规划特点 实数的解不能直接四舍五入为整数,因为此时可能不满足约束条件 举例-合理下料问题 模型: 题目: 这是在使用材料 1)使用零件A1-Am毛胚,就是使用零件 2)下料方式B1-Bn就…

程序员 面试笔记 C++ 程序设计的基础 第10章

10.1.1 程序的编译和执行 以#开头的代码都属于预处理器处理的步骤#include 将头文件的内容包含进入当前源文件中#define 展开宏定义#ifdef 处理条件编译指令(#ifdef、ifndef、#if、#else、#elif、#endif)#other 处理其他宏指令(#error、#warning、#line、#pragma) 预…

数学建模 分支限界算法求解整数规划原理以及编程实现

引入 线性规划问题(松弛问题) 图解法: 使用图解法求出最优解,再使用四舍五入求出的整数解不满足条件 完全枚举法(穷举法):找出集合内所有满足条件的整数点,再带入不等式中,看是否有最优解 分支限界法 说明: 松弛问题:线性规划问题 ILP:整数规划,在线性规划的基础上对决策…

数学建模 割平面算法求解整数规划基本原理与编程实现

基本思想 松弛问题:线性规划 割掉一块全部都是小数的区域(这一部分取不到整数) 案例 1)横坐标x1,纵坐标x2 2)蓝色小三角形的区域:x2:(1,7/4) x1:(0,3/4) 这块区域,x1与x2完全取不到整数,所以直接切去 所以,此时取值范围变化了: x2<1把此约束条件带入,得到x11,x21,z2 3…

数学建模 匈牙利算法求解整数规划基本原理与编程实现

投资问题(0-1规划) 匈牙利算法求解0-1规划问题 解答: 项目之间是互斥关系,所以使用x1x2x31; 项目5是以项目1为先验条件,所以x5<x1,意味着x11时,x51或0 ,但x10时,x50 案例- 互斥约束问题 1)当两个约束条件是互斥时,新建立一个约束条件y(0-1) 2)如果M取无穷大的数,此时就…

Ubuntu通过可视化界面配置 查找IP地址不存在的解决办法

命令行用ifconfig eno0 up&#xff0c;启用网卡&#xff0c;没有问题&#xff0c;硬件ok&#xff0c;但是配置里面还是找不到。之前修改了 /etc/network/interfaces&#xff0c;去掉配置。由于图形界面使用的是 network-manager&#xff0c;所以需要修改重启sudo service netwo…

数学建模 非线性规划原理的应用与编程实现

非线性规划模型NP 包含非线性函数:不是直线而是曲线、曲面、或不确定的属性,叫非线性。 如:x^2 线性函数:一次函数,axb 列1-投资决策问题 解答: 设置决策变量: 1)投资某个项目达到收益最高,使用比值法(更直观) 收益/投资花费 取值范围 1)*非线性规划中常用 限制xi0或1(在编…

数学建模1 赛前准备 赛题选择 查找文献

了解国赛 生成了MD5码之后就不能再碰文件&#xff0c;打开都不行 软件安装 其他 ABC赛题特点 一般选择B,C题 赛题选择 1.排除背景都看不懂的题 定题 1.少数服从多数 2.选择资料多的题 搜索技巧 1.双引号–“CT参数标定”&#xff08;内容或标题一致&#xff09; 2…

剑指offer 第一章 面试的流程

面试的流程 面试的三种形式 电话面试&#xff1a;形象化语言讲解细节&#xff1b;如果没有听清楚和听懂问题&#xff0c;不要不懂装懂&#xff0c;答非所问共享桌面&#xff0c;远程面试&#xff1a;编程习惯和调试能力。1&#xff0c;思考清楚再开始编码&#xff0c;先想思路…

数学建模2 数据预处理

注意 题目给出的数据不能直接使用&#xff0c;要对数据进行异常处理 缺失值 1.缺失值太多就要把该项指标删除&#xff08;40%相当大&#xff09; 2.处理&#xff1a;对精度不高 定量数据&#xff0c;使用均值 定性数据&#xff0c;使用众数 3.对数据精度有要求 但对导数没有…

n个整数,其中有两个数是重复的,要求找出这两个重复的整数

n个整数&#xff0c;其中有两个数是重复的&#xff0c;要求找出这两个重复的整数方法一方法二方法三空间复杂度的计算常量空间线性空间二维空间递归空间方法一 使用set集合 将每一个元素放到set集合中&#xff0c;加入的时候判断集合中是否存在此元素&#xff0c;如果if判断找…

数学建模3 论文排版注意点

注意事项 1&#xff09;论文标题不超过三级 5 5.1 5.1.1 2&#xff09;不要留有大片空白 3&#xff09;表格&#xff1a;三线表&#xff0c;只有三条横线&#xff0c;没有竖线&#xff0c;表的标题放在表的上方 4&#xff09;图名放在图的下方&#xff0c;图1 xxx 5)重要…