文件操作--按数据块读写文件

news2024/12/23 12:50:45

        函数fread()和函数fwrite()用于一次读取一组数据,即按数据块读写文件。fread()的函数原型为:

        unsigned int fread(void *buffer ,unsigned int size,unsigned int count ,FILE *fp);

        fread()的功能是从fp所指的文件中读取数据块并存储到buffer指向的内存中。buffer是待读入数据块的起始地址。size是每个数据块的大小(待读入的每个数据块的字节数)。count是最多允许读取的数据块个数(每个数据块size个字节)。函数返回的是实际读到的数据块个数。

        fwrite()的函数原型为:

        unsigned  int fwrite(void *buffer,unsigned int size,unsigned int count,FILE *fp);

        fwrite()的功能是将buffer指向的内存中的数据块写入fp所指的文件。buffer是待输出数据块的起始地址。size是是每个数据块的大小(待输出的每个数据块的字节数)。count是最多允许写入的数据块个数(每个数据块size个字节)。函数返回的是实际写入的数据块个数。

        快数据的读写使我们不再局限于一次只读取一个字符、一个单词或一行字符串,它允许用户指定想要读写的内存块大小,最小为1个字节,最大为整个文件。

例题:编程计算每个学生的4门课程的平均分,将学生的各科成绩及平均分输出到文件student.txt中,然后再从文件中读出数据并显示到屏幕上。

#include <stdio.h>
#include <stdlib.h>
#define N 30
typedef struct date
{
	int year;
	int month;
	int day;
}DATE;
typedef struct student
{
	long studentid;
	char studentname[10];
	char studentsex;
	DATE birthday;
	int score[4];
	float aver;
}STUDENT;
void inputscore(STUDENT stu[],int n,int m);
void averscore(STUDENT stu[],int n,int m);
void writetofile(STUDENT stu[],int n);
int readfromfile(STUDENT stu[]);
void printscore(STUDENT stu[],int n,int m);
int main(void)
{
	STUDENT stu[N];
	int n,m=4;
	printf("How many students?");
	scanf("%d",&n);
	inputscore(stu,n,m);
	averscore(stu,n,m);
	writetofile(stu,n);
	n = readfromfile(stu);
	printscore(stu,n,m);
}
void inputscore(STUDENT stu[],int n,int m)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		printf("input record %d:\n",i+1);
		scanf("%ld",&stu[i].studentid);
		scanf("%s",stu[i].studentname);
		scanf(" %c",&stu[i].studentsex);
		scanf("%d",&stu[i].birthday.year);
		scanf("%d",&stu[i].birthday.month);
		scanf("%d",&stu[i].birthday.day);
		for(j=0;j<m;j++)
		{
			scanf("%d",&stu[i].score[j]);
		}
	}
}
void averscore(STUDENT stu[],int n,int m)
{
	int i,j,sum;
	for(i=0;i<n;i++)
	{
		sum=0;
		for(j=0;j<m;j++)
		{
			sum= sum+stu[i].score[j];
		}
		stu[i].aver = (float)sum/m;
	}
}
void writetofile(STUDENT stu[],int n)
{
	FILE *fp;
	if((fp = fopen("student.txt","w"))==NULL)
	{
		printf("Failure to open student.txt!\n");
		exit(0);
	}
	fwrite(stu,sizeof(STUDENT),n,fp);
	fclose(fp);
}
int readfromfile(STUDENT stu[])
{
	FILE *fp;
	int i;
	if((fp=fopen("student.txt","r"))==NULL)
	{
		printf("Failure to open student.txt!\n");
		exit(0);
	}
	for(i=0;!feof(fp);i++)
	{
		fread(&stu[i],sizeof(STUDENT),1,fp);
	}
	fclose(fp);
	printf("Total students is %d.\n",i-1);
	return i-1;
}

void printscore(STUDENT stu[],int n,int m)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		printf("%10ld%8s%3c%6d/%02d/%02d",stu[i].studentid,stu[i].studentname,stu[i].studentsex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
		for(j=0;j<m;j++)
		{
			printf("%4d",stu[i].score[j]);
		}
		printf("%6.lf\n",stu[i].aver);
	}
}

 

 

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

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

相关文章

raid5故障导致LeftHand存储崩溃的服务器数据恢复案例

HP-LeftHand存储简介&#xff1a; HP LeftHand存储支持RAID5、RAID6、RAID10磁盘阵列&#xff0c;支持卷快照&#xff0c;卷动态扩容等。 服务端&#xff1a; 客户端&#xff1a; LeftHand存储分为三个层级&#xff1a;物理磁盘、逻辑磁盘、逻辑卷。多个物理磁盘组成一个逻辑的…

pdf文档加水印怎么弄?用这款软件很方便

在工作中&#xff0c;我们经常需要将PDF文件发送给他人&#xff0c;但无法保证文件内容不被窃取&#xff0c;因此需要添加水印来保证文件的安全性。如果你不知道如何给PDF文件添加水印&#xff0c;以下两款软件可以帮助你轻松实现&#xff0c;一起来看看吧&#xff01; 方法一&…

火爆全网,自动化测试-Allure完美测试报告(详全)卷起来...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、allure简介 A…

网络协议与攻击模拟-17-DNS协议-报文格式

二、DNS 查询 客户机想要访问www.baidu.com&#xff0c;根据自己的 TCP / IP 参数&#xff0c;向自己的首选 DNS 服务器发送 DNS 请求 首选 DNS 收到客户机的请求后&#xff0c;会去查询自己的区域文件&#xff0c;找不到www.baidu.com的 IP 地址信息&#xff08;将请求转发到…

天池大赛中药说明书实体识别挑战冠军方案开源(二)部署运行实战 附详细操作说明

目录 Introduction 导言环境搭建环境 Github地址项目目录说明使用步骤下载预训练模型更改部分代码模型训练参数设置BERT-CRF模型训练BERT-SPAN模型训练BERT-MRC模型训练 运行训练预测复赛 test 文件 &#xff08;上述模型训练完成后&#xff09; 参考资料其它资料下载 Introduc…

Rdkit|化学指纹(fingerprint)

github:地址 文章目录 Rdkit|化学指纹&#xff08;fingerprint&#xff09;化学指纹&#xff08;fingerprint&#xff09;RDKFingerprintMorgan指纹提供的指纹信息存储在字典中 MACCS指纹AtomPair指纹TopologicalTorsion指纹参考 Rdkit|化学指纹&#xff08;fingerprint&#x…

使用楔形步进体模进行X射线骨密度测定

来源&#xff1a;投稿 作者&#xff1a;洪棋 编辑&#xff1a;学姐 骨密度(BMD)被广泛应用于骨折风险的预测和骨质疏松症的常规识别。双能x线骨密度仪(DXA)在临床上广泛用于测量脊柱、髋关节和前臂的骨密度(aBMD)。放射学骨密度测定法(Radiographic absorpometry, RA)是最早的骨…

最全Linux Shell详细教程

一、环境准备 我们在这里就在本地测试学习&#xff0c;因此我在这里先不建议大家这么着急去买服务器来学&#xff0c;这样比较费钱&#xff0c;等我们学好这些基础之后&#xff0c;再去上手服务器&#xff0c;那将是手到擒来。 本地学习工具&#xff1a;虚拟机 如果你没有该工…

ES6~ES13新特性(一)

1 ECMA新描述概念 2 let、const的使用 3 let、const和var区别 4 块级作用域的使用 5 模板字符串的详解 6 ES6函数的增强用法 一个执行上下文关联两个环境。词法环境和变量环境。 词法环境是由let和const创建&#xff1b;变量环境是由var创建的。 let-const的基本使用、不能…

网络安全现状,一个黑客真实的收入

前言 上次带大家了解了什么是黑客&#xff0c;黑客是干嘛的&#xff0c;今天就来看看黑客的收入和方向怎么样。 一个黑客年薪是多少呢&#xff1f; 外界普遍认为黑客是高收入群体&#xff0c;那么你想过黑客是怎么赚钱的吗&#xff1f;黑客分为白帽黑客和黑帽黑客&#xff0…

R语言实现SMOTE与SMOGN算法解决不平衡数据的回归问题

本文介绍基于R语言中的UBL包&#xff0c;读取.csv格式的Excel表格文件&#xff0c;实现SMOTE算法与SMOGN算法&#xff0c;对机器学习、深度学习回归中&#xff0c;训练数据集不平衡的情况加以解决的具体方法。 在之前的文章Python实现SMOGN算法解决不平衡数据的回归问题&#x…

源码安装 gcc遇到的问题

1、需要的工具和库的安装1 见https://gcc.gnu.org/install/preprequisites.hml 2、源码下载和依赖的工具的源码的下载 在https://gcc.gnu.org/mirrors.html中选择一个镜像源的链接打开&#xff0c;下边以日本的源(http://ftp.tsukuba.wide.ad.jp/software/gcc/)为例。 2.1 …

MySQL数据库的备份与还原、视图基础操作

一、备份与还原 1、使用mysqldump命令备份数据库中的所有表 mysqldump -uroot -p#$%#*#^* booksDB authorbook authors books > /backup/db/booksDB.spl 2、备份booksDB数据库中的books表 mysqldump -uroot -p*&*&……%&#xffe5;#&#xffe5;% booksDB books …

FreeRTOS(任务调度)

任务调度 什么是任务调度&#xff1f; 调度器就是使用相关的调度算法来决定当前需要执行的哪个任务。 FreeRTOS中开启任务调度的函数是 vTaskStartScheduler() &#xff0c;但在 CubeMX 中被封装为 osKernelStart() 。 FreeRTOS的任务调度规则是怎样的&#xff1f; FreeRTOS…

QT禁用窗口【关闭】按钮的实现方法

QT禁用窗口关闭按钮的实现方法&#xff0c;直接在窗体类构造函数的内部写入setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint)即可实现&#xff0c;案例如下&#xff1a; #include "form.h" #include "…

apache 安装配置 基础篇(三) 之 虚拟机、主服务等、默认虚拟主机、serverpath、DocumentRoot Directory

apache虚拟主机类型有两种 1、基于名称的虚拟主机 2、基于地址或IP地址的虚拟主机 基于名称的虚拟主机 但是如果不用域名&#xff08;host&#xff09;就没有办法区分了&#xff0c;而执行第一个匹配的网站了(第一个虚拟主机所处理) ## httpd-vhosts.conf 添加如下代码&…

选择合适的软件,提升工作计划效率

在快节奏的工作环境中&#xff0c;日程安排变得尤为重要。有许多不同的软件可用于帮助管理日程&#xff0c;但哪个软件最适合您的需求&#xff1f;在本文中&#xff0c;我们将介绍几种适合工作安排的软件。 1.Google Calendar Google日历是一种功能强大、易于使用且免费的日历应…

Orange pi3初调试

因为树莓派沦为理财产品1年前出手殆尽后&#xff0c;现在唯一一个B性能不足一直没动力调试&#xff0c;沦为吃灰工具。 偶然之间多多给推了个orange产品预售&#xff0c;看了下pi3的参数&#xff0c;这不和赚了差价的3B一个性能吗&#xff1f;果断定了个预售款&#xff0c;在差…

机器学习洞察 | 挖掘多模态数据机器学习的价值

在过去的数年里&#xff0c;我们见证了机器学习和计算机科学领域的很多变化。人工智能应用也愈趋广泛&#xff0c;正在加速融入人们的日常生活之中。机器学习作为技术核心&#xff0c;也在持续地发展进化&#xff0c;在更多领域发挥出越来越重要的作用。**机器学习会有哪些新的…

python 将 csv转excel (.xls和.xlsx)的几种方式

前言 excel 后缀有2种格式&#xff0c; .xls 是从 Excel 97 到 Excel 2003 的默认文件格式&#xff0c;而 .xlsx 是 Excel 2007 及更高版本的默认文件格式。 .xlsx和.xls格式的主要区别在于&#xff0c;.xls格式单个工作表最多支持65536行&#xff0c;256列。 .xlsx格式最多…