C语言文件操作总结
目录
字符方式读入文件
数据块方式读写文件
文件定位与随机读写
文件中数据的修改
字符方式读入文件
1.向文件中写入(输入字符)
用 fputc 函数或 puts 函数可以把一个字符写到磁盘文件中去。
int fputc(int ch,FILE * fp)
ch 是要输出的字符,他可以是一个字符常量,也可以是一个字符变量;fp是文件指针变量,已经指向了一个由fopen函数打开的文件。
功能:fputc(ch,fp)函数将字符输入到fp所指向的流式文件中去。如果输出成功,返回值就是输入的字符,失败则返回EOF。
从键盘输入遗传字符,以回车符\n结束,然后输入到磁盘文件中去
#include<stdio.h>
#include<stdlib.h>
int main()
{//从键盘输入遗传字符,以回车符\n结束,然后输入到磁盘文件中去FILE * fp;char ch;if((fp=fopen("output1.txt","w"))==NULL){printf("无法创建文件!");exit(0); }while((ch=getchar())!='\n'){fputc(ch,fp);}fclose(fp);return 0;
}
2.从文件中读出一个字符
用 fgetc 函数或者 getc 函数可以从磁盘中读出一个字符。
int fgetc(FILE * fp)
从磁盘文键逐个读入字符,并在终端输出
#include<stdio.h>
#include<stdlib.h>
int main()
{//从磁盘文键逐个读入字符,并在终端输出FILE * fp;char ch;if((fp=fopen("output1.txt","r"))==NULL){printf("无法打开文件!\n");exit(0); } while((ch=fgetc(fp))!=EOF){putchar(ch);}fclose(fp);return 0;
}
3.向文件中写入一个字符串
用 fputs 函数可以把一个字符串输入到指定的流式文件中,其原型为
int fputs(char * fp,FILE * stream)
其中,string为字符串,stream为文件指针。
把指针string所指向的字符串输出到文件指针stream所指向的文件中,但字符串结束符‘\0’不输出。
从键盘输入若干行字符,把他们输出到磁盘文件中保存起来。
#include<stdio.h>
#include<stdlib.h>
int main()
{//从键盘输入若干行字符,把他们输出到磁盘文件中保存起来。FILE * fp;char string[81];if((fp=fopen("data.txt","w"))==NULL){printf("未找到此文件!");exit(0); } while(gets(string)!=NULL)//ctrl+Z结束 {fputs(string,fp);fputc('\n',fp);//在每个字符串后加一个换行符 }fclose(fp);return 0;
}
数据块方式读写文件
使用数据块的方式对二进制问价进行读写操作,涉及的函数有两个:fread() 和 fwrite() 。
建立学生档案文件,每个记录包括学生的姓名,性别,年龄和入学总分
#include<stdio.h>
#include<stdlib.h>
struct student
{char name[10];char sex;int age;float score;
};
int main()
{FILE * fp;struct student stud;char str[80],ch='y';if((fp=fopen("stud2.rec","wb"))==NULL)//二进制只写方式打开 {printf("无法打开文件!\n");exit(0);}while(ch=='y'||ch=='Y'){printf("输入姓名:");gets(stud.name);printf("输入性别:");gets(str);stud.sex=str[0];printf("输入年龄:");gets(str);stud.age=atoi(str);//年龄:将字符串转换为整型 printf("输入分数:");gets(str);stud.score=atof(str);//分数:将字符串转换为浮点型fwrite(&stud,sizeof(stud),1,fp);//写入数据到文件do{printf("继续输入:(y/n)? ");gets(str);ch=str[0];} while(!(ch=='y'||ch=='n'||ch=='Y'||ch=='N'));}fclose(fp);return 0;
}
从磁盘文件按记录读取数据,并显示读入的内容,直到文件尾
#include<stdio.h>
#include<stdlib.h>
struct student
{char name[10];char sex;//'M',或'F' int age;float score;
};
int main()
{//从磁盘文件按记录读取数据,并显示读入的内容,直到文件尾struct student stud;FILE * fp;if((fp=fopen("stud2.rec","rb"))==NULL) {printf("无法打开文件stud2.rec!\n");exit(0); }while(fread(&stud,sizeof(stud),1,fp)==1){printf("\n姓名:%s",stud.name);printf("\n性别:%c",stud.sex);printf("\n年龄:%d",stud.age);printf("\n分数:%.2f",stud.score);} printf("\n");fclose(fp);return 0;
}
文件定位与随机读写
文件的定位:利用fesk()和ftell()函数编写程序测量一个文件的长度
#include<stdio.h>
#include<stdlib.h>
//文件的定位
//利用fesk()和ftell()函数编写程序测量一个文件的长度
long filesize(FILE * fp)
{long curpos,length;//当前文件读写位置指针相当于文件开头的位移量 curpos=ftell(fp);//保存文件的当前读写位置指针 fseek(fp,0L,SEEK_END);//文件读写位置指针置于文件尾端length=ftell(fp);//求文件长度fseek(fp,curpos,SEEK_SET);//恢复文件的原读写位置的指针return length;
}
long filesize(FILE * stream);
int main()
{FILE * stream;char filename[10];printf("\n输入文件名:");scanf("%s",filename);if((stream=fopen(filename,"rb"))==NULL){printf("无法打开文件:%s\n",filename);exit(0);}printf("%s的文件大小是%ld(byte)\n",filename,filesize(stream));fclose(stream);return 0;
}
随机读写:
由之前建立的学生入学档案的磁盘文件stud.rec中,假设学生按照分数升序排列。
现要求设计一个程序,输入一个整型值给n,输出分数最高的n个学生记录,即排在尾部的n个学生记录
#include<stdio.h>
#include<stdlib.h>
struct student
{char name[10];char sex;//'M',或'F' int age;float score;
};
//由之前建立的学生入学档案的磁盘文件stud.rec中,假设学生按照分数升序排列。
//现要求设计一个程序,输入一个整型值给n,输出分数最高的n个学生记录,即排在尾部的n个学生记录
int main()
{FILE * fp;struct student stud;int n;if((fp=fopen("stud.rec","rb"))==NULL){printf("无法打开文件");exit(0); } printf("\n请输入一个整数:");scanf("%d",&n);fseek(fp,-n*sizeof(stud),SEEK_END); //定位到倒数第n个学生记录while(fread(&stud,sizeof(stud),1,fp)==1){printf("\n姓名:%s",stud.name);printf("\n性别:%c",stud.sex);printf("\n年龄:%d",stud.age);printf("\n分数:%.2f",stud.score); } return 0;
}
文件中数据的修改
将之前的成绩表中的女生成绩加五分
#include<stdio.h>
#include<stdlib.h>
struct student
{char name[10];char sex;//'M',或'F' int age;float score;
};
int main()
{//从磁盘文件按记录读取数据,并显示读入的内容,直到文件尾struct student stud;FILE * fp;if((fp=fopen("stud.rec","rb"))==NULL) {printf("无法打开文件stud2.rec!\n");exit(0); }while(fread(&stud,sizeof(stud),1,fp)==1){printf("\n姓名:%s",stud.name);printf("\n性别:%c",stud.sex);printf("\n年龄:%d",stud.age);printf("\n分数:%.2f",stud.score);} printf("\n");fclose(fp);return 0;
}
输入一个学生的姓名,编写程序将stud.rec中该学生的记录删除
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{char name[10];char sex;//'M',或'F' int age;float score;
};
//输入一个学生的姓名,编写程序将stud.rec中该学生的记录删除
int main()
{char name[10];FILE * fp_old,* fp_new;struct student stud;if((fp_old=fopen("stud.rec","rb"))==0)//读方式打开原数据文件 {printf("\n不能打开文件");exit(0); }if((fp_new=fopen("stud3.rec","wb"))==0)//写方式创建新数据文件 {printf("\n不能创建文件");exit(0); } printf("请输入要删除的学生姓名:");gets(name);while(fread(&stud,sizeof(stud),1,fp_old)==1){//在原文件中读取一个学生记录在stud中if(strcmp(stud.name,name)!=0){fwrite(&stud,sizeof(stud),1,fp_new); } } fclose(fp_old);fclose(fp_new);remove("stud.rec");//删除原文件rename("stud3.rec","stud.rec"); //将新文件重命名 return 0;
}
向文件中插入数据
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{char name[10];char sex;//'M',或'F' int age;float score;
};
int main()
{FILE * fp;struct student x,t={"Alex",'f',20,566};if((fp=fopen("stud.rec","a+b"))==0){printf("\n\t无法打开文件!\n");exit(0);}fread(&x,sizeof(struct student),1,fp);//从文件中读一条学生记录fseek(fp,0L,SEEK_END); fwrite(&t,sizeof(struct student),1,fp);//将t中的数据追加到文件尾rewind(fp);while(fread(&x,sizeof(struct student),1,fp)==1){printf("\n%15s%4c%8d%8.2f",x.name,x.sex,x.age,x.score); } fclose(fp);return 0;
}
相关文章:
C语言文件操作总结
目录 字符方式读入文件 数据块方式读写文件 文件定位与随机读写 文件中数据的修改 字符方式读入文件 1.向文件中写入(输入字符) 用 fputc 函数或 puts 函数可以把一个字符写到磁盘文件中去。 int fputc(int ch,FILE * fp) ch 是要输出的字符&#…...
原生js之dom如何进行事件监听(事件捕获/冒泡)
那么好,这次主要讲解的就是dom是如何进行事件监听和事件取消监听的,我们知道vue中主要用watch来进行监听. js监听与取消监听 那么原生js主要用到的就是addListenEvent事件来进行监听,可以监听文档dom对象也可以监听浏览器bom对象,监听事件的语法结构如下 Dom/Bom监听 eleme…...

使用SimPowerSystems并网光伏阵列研究(Simulink实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

BUUCTF-WEB-[ACTF2020 新生赛]Includel
打开靶机 点击tips 利用Burp抓包,未见异常 但发现了响应头是 PHP/7.3.13 想到了"php://input"伪协议POST发送PHP代码 构建Payload:?filephp://filter/readconvert.base64-encode/resourceflag.php 这里需要注意的是使用php://filter伪协议…...
算法通关村十四关:白银挑战-堆能高效解决的经典问题
白银挑战-堆能高效解决的经典问题 1.在数组中找第K大的元素 LeetCode215 https://leetcode.cn/problems/kth-largest-element-in-an-array/ 思路分析 主要解决方法有3个,选择法,堆查找法和快速排序法 方法1:选择法 先遍历一遍找到最大的…...

跨站请求伪造(CSRF)攻击与防御原理
跨站请求伪造(CSRF) 1.1 CSRF原理 1.1.1 基本概念 跨站请求伪造(Cross Site Request Forgery,CSRF)是一种攻击,它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程序上执行非本意操作的攻击&a…...

从0到1实现播放控制器
这系列文章主要讲诉如何从0到1使用QT实现带时间显示、滚动字幕等的自定义配置视频播放控制器。平时我们乘坐地铁经常看到各条线的播放控制器都大同小异。其实都是通过QT等界面开发软件来实现的。 在具体开发之前,需要明确我们需要做什么? 1. 开发一个可…...
【Vue-Element-Admin】导出el-table全部数据
背景 因为el-table实现了分页查询,所以想要实现el-table需要重新编写一个查询全部数据的方法 查询全部数据 listQuery: export default{return{listQuery:{//page:1,//limit:20,//如果想兼容按条件导出,可以定义查询条件age:undefined,sex:undefined…...
MFC 更改控件的大小和位置
获取当前主窗体的位置rect CRect dlgNow;GetWindowRect(&dlgNow);获取某一个控件当前的位置 CRect rect;CButton* pBtn (CButton*)GetDlgItem(IDC_BUTTONXXX);//获取按钮控件pBtn->GetWindowRect(rect);CWnd* pWnd(CWnd*)GetDlgItem(IDC_EDITXXX);//其它控件࿰…...
【向量数据库】相似向量检索Faiss数据库的安装及余弦相似度计算(C++)
目录 简介安装方法安装OpenBLAS安装lapack编译Faiss 代码示例余弦相似度计算输出ID号而非索引的改进版 简介 Faiss 是一个强大的向量相似度搜索库,具有以下优点: 高效的搜索性能:Faiss 在处理大规模向量数据时表现出色。它利用了高度优化的索…...

教育培训小程序的设计与功能解析
随着互联网的发展,线上教育逐渐成为一种趋势,越来越多的人开始选择在线学习。而搭建一个适合自己的线上教育小程序,可以为教育机构或个人提供更好的教学和学习体验。在本文中,我们将介绍如何通过一个第三方制作平台来搭建在线教育…...

【ES】illegal_argument_exception“,“reason“:“Result window is too large
查询ES数据返回错误: {"root_cause":[{"type":"illegal_argument_exception","reason":"Result window is too large, from size must be less than or equal to: [10000] but was [999999]. See the scroll api for…...
SpringBoot实现登录拦截
如果我们不进行登录拦截的话,即使我们跳过登录页面直接去访问任意一个页面也能访问成功,那么登录功能就没有意义,同时也会存在安全问题,因为有些操作是要用户登录后才能执行的,如果用户没有登录,该接口就获…...

浅谈泛在电力物联网、能源互联网与虚拟电厂
导读:从能源互联网推进受阻,到泛在电力物联网名噪一时,到虚拟电厂再次走向火爆,能源领域亟需更进一步的数智化发展。如今,随着新型电力系统建设推进,虚拟电厂有望迎来快速发展。除了国网和南网公司下属的电…...
深度学习框架安装与配置指南:PyTorch和TensorFlow详细教程
如何安装和配置深度学习框架PyTorch和TensorFlow 为什么选择PyTorch和TensorFlow?PyTorchTensorFlow安装PyTorch 步骤1:安装Python步骤2:使用pip安装PyTorch 安装TensorFlow 步骤1:安装Python步骤2:使用pip安装TensorF…...
vue中属性执行顺序
vue中属性的执行顺序 在Vue 2中,组件的生命周期和数据绑定的执行顺序如下: data:首先,组件会调用 data 函数,该函数返回一个对象,该对象的属性和方法会被分配给组件的 $data。init:接下来&…...

【代码随想录】Day 50 动态规划11 (买卖股票Ⅲ、Ⅳ)
买卖股票Ⅲ https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/ 无语了。。。 写的很好就是怎么都过不了。。。 还是就用代码随想录的写法吧。。。 class Solution { public:int maxProfit(vector<int>& prices) {int n prices.size();vector&…...

PHP反序列化漏洞
一、序列化,反序列化 序列化:将php对象压缩并按照一定格式转换成字符串过程反序列化:从字符串转换回php对象的过程目的:为了方便php对象的传输和存储 seriallize() 传入参数为php对象,序列化成字符串 unseriali…...

容器编排学习(一)k8s集群管理
一 Kubernetes 1 概述 就在Docker容器技术被炒得热火朝天之时,大家发现,如果想要将Docker应用于具体的业务实现,是存在困难的一一编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统࿰…...
js去除字符串空格的几种方式
方法1:(最常用)全部去除掉空格 var str abc d e f g ; function trim(str) { var reg /[\t\r\f\n\s]*/g; if (typeof str string) { var trimStr str.replace(reg,); } console.lo…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...