文件操作--按格式读写文件

news2024/11/22 8:48:07

        C语言允许按指定格式读写文件。函数fscanf()用于按指定格式从文件读数据。其函数原型为:

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

其中,第一个参数为文件指针,第2个参数为格式控制参数,第3个参数为输出参数列表,后两个参数和返回值与函数scanf()相同。

        函数fprintf()用于按指定格式像文件写数据。其函数原型为:

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

其中,第1个参数为文件指针,第2个参数为格式控制参数,第3个参数为输出参数列表,后两个参数和返回值与函数printf()相同。

        用函数fscanf()和fprintf()进行文件的格式化读写,读写方便,容易理解,但输入时要将ASCII字符转换称二进制数,输出时要将二进制数转换为ASCII字符,耗时较多。

 例题1:编程计算每个学生的四门课的平均分,将学生个各科成绩及平均分输出到文件score.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 writefile(STUDENT stu[],int n,int m);
int main(void)
{
	STUDENT stu[N];
	int n;
	printf("How many student?");
	scanf("%d",&n);
	inputscore(stu,n,4);
	averscore(stu,n,4);
	writefile(stu,n,4);
	return 0; 
}

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 writefile(STUDENT stu[],int n,int m)
{
	FILE *fp;
	int i,j;
	if((fp = fopen("score.txt","w"))==NULL)
	{
		printf("Failure to open score.txt!\n");
		exit(0);
	}
	fprintf(fp,"%d\t%d\n",n,m);
	for(i=0;i<n;i++)
	{
		fprintf(fp,"%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++)
		{
			fprintf(fp,"%4d",stu[i].score[j]);
		}
		fprintf(fp,"%6.lf\n",stu[i].aver); 
	}
	fclose(fp);
 } 

 

 

 例题2:编程从文件score1.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 readfromfile(STUDENT stu[],int *n,int *m);
void printscore(STUDENT stu[],int n,int m);
int main(void)
{
	STUDENT stu[N];
	int n,m=4;
	readfromfile(stu,&n,&m);
	printscore(stu,n,m);
	return 0;
}

void readfromfile(STUDENT stu[],int *m,int *n)
{
	FILE *fp;
	int i,j;
	if((fp= fopen("score.txt","r"))==NULL)
	{
		printf("Failure to open score.txt!\n");
		exit(0);
	}
	fscanf(fp,"%d\t%d",n,m);
	for(i=0;i<*n;i++)
	{
		fscanf(fp,"%10ld",&stu[i].studentid);
		fscanf(fp,"%8s",stu[i].studentname);
		fscanf(fp,"%c",&stu[i].studentsex);
		fscanf(fp,"%6d/%2d/%2d",&stu[i].birthday.year,
								&stu[i].birthday.month,
								&stu[i].birthday.day);
		for(j=0;j<*m;j++)
		{
			fscanf(fp,"%4d",&stu[i].score[j]);
		}
		fscanf(fp,"%f",&stu[i].aver);
	}
	fclose(fp);
}

void printscore(STUDENT stu[],int n,int m)
{
	int i,j;
	for(i=0;j<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/744922.html

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

相关文章

2023届网络安全岗秋招面试题及面试经验分享

Hello&#xff0c;各位小伙伴&#xff0c;我作为一名网络安全工程师曾经在秋招中斩获&#x1f51f;个offer&#x1f33c;&#xff0c;并在国内知名互联网公司任职过的职场老油条&#xff0c;希望可以将我的面试的网络安全大厂面试题和好运分享给大家~ 转眼2023年秋招已经到了金…

Linux ❀ Openssh 8.9p1源码升级教程

文章目录 升级操作注意事项&#xff1a;1. 安装依赖2. 执行升级2.1 上传压缩包并保存配置2.2 开始升级 升级操作注意事项&#xff1a; 编译过程需要依赖&#xff0c;必须安装完成!!!SSH服务升级过程可能会导致无法远程连接服务器!!!若必须远程登录必须确认telnet服务可用!!!升…

3D格式转换工具HOOPS Exchange功能大盘点:快速、准确的CAD数据转换SDK!

HOOPS Exchange SDK是一套C软件库&#xff0c;使开发团队能够快速将可靠的二维和三维CAD导入和导出到他们的应用程序中&#xff0c;访问广泛的数据&#xff0c;包括边界表示&#xff08;B-REP&#xff09;、产品制造信息&#xff08;PMI&#xff09;、模型树、视图、持久性ID、…

C语言—模拟实现memcpy,memmove

1.memcpy函数的介绍与实现 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。 这个函数在遇到 \0 的时候并不会停下来。 如果source和destination有任何的重叠&#xff0c;复制的结果都是未定义的。 void * memcpy ( void * destination, const v…

MySQL原理探索——30 答疑文章(二):用动态的观点看加锁

在第20和21篇文章中&#xff0c;介绍了 InnoDB 的间隙锁、next-key lock&#xff0c;以及加锁规则。 今天这篇答疑文章的主题&#xff0c;即&#xff1a;用动态的观点看加锁。 为了方便理解&#xff0c;我们再一起复习一下加锁规则。这个规则中&#xff0c;包含了两个“原则”、…

电子地图对客户端电脑配置要求

二三维地图是基于canvas和webgl在前端进行的实时渲染&#xff0c;所以首先保证您的客户端是一个具有独立显卡的PC机&#xff0c;而不是虚拟机或低配机器。 其次&#xff0c;性能问题与显示器分辨率以及显卡能力息息相关&#xff0c;通常来说屏幕分辨率越高&#xff0c;越消耗性…

做跨境电商必懂的五大流量运营逻辑,带你玩转流量市场!

一、你上一家是做什么类目的&#xff0c;你们前名是谁&#xff0c;分别是什么样的流量来源? 商家排名一般有四个维度&#xff0c;弟一个维度是消量弟一&#xff0c;弟二个维度是销售额弟一&#xff0c;第三个维度是流量弟一&#xff0c;第四个维度利润弟一。 只要我们找出来自…

【IMX6ULL驱动开发学习】18.中断下半部(tasklet、工作队列、中断线程化)

下图表述了Linux内核的中断处理机制&#xff0c;为了在中断执行时间尽量短和中断处理需完成的工作尽量大之间找到一 个平衡点&#xff0c; Linux将中断处理程序分解为两个半部&#xff1a; 顶半部&#xff08;Top Half&#xff09; 和底半部&#xff08;Bottom Half&#xff09…

centos7安装、使用webbench

简言 1. linux下web服务器性能压测工具有很多&#xff0c;webbench就很不错&#xff0c;而且安装使用都很简单 2. webbench不但能对静态页面的压测&#xff0c;还能对动态页面&#xff08;ASP,PHP,JAVA,CGI&#xff09;进行压测。而且支持对含有SSL的安全网站&#xff0c;例如…

Spring cloud alibaba 整合 Sentinel

Sentinel详解 Docker安装1、拉取镜像2、运行容器访问 整合 spring-cloud-alibaba1、引入Maven依赖2、配置控制台3、编写控制器4、启动Sentinel访问自定义异常处理统一异常处理 整合 OpenFeign引入Maven依赖&#xff1a; 配置&#xff1a;编写 Feign 实现指定 Feign 容错类控制器…

ROS2在改造ros1时,报警相关库异常排查

一、在make时&#xff0c;存在以下报警&#xff0c;检查h中是已经包含相关的头文件了&#xff0c;并且也已改为ros2的格式。 二、解决&#xff1a; 检查发现&#xff0c;在CMakelists.txt中未添加相关依赖包&#xff0c;重新添加后&#xff0c;报警解除&#xff0c;编译通过。…

商家们的“疗效”焦虑,巨量引擎、阿里妈妈、腾讯广告们都在怎么满足?

文 | 螳螂观察 作者 | 青月 有人的地方就有营销。 虽然这是一门永不褪色的“生意”&#xff0c;但在增量见顶、红利消失的互联网&#xff0c;数字营销变得越来越听不见“水响”。 就连在号称“史上最卷”的今年618&#xff0c;同台竞技的各大数字营销服务商都在强调自己的“…

difflib 比较文本相似度,找出错误值

在日常的数据分析过程中&#xff0c;我们可能会遇到这样的问题。在处理数据时&#xff0c;有的文本内容是同一类目&#xff0c;但是由于手工输入错误 或者大小写的问题&#xff0c;可能会造成将产品分到不同的类目下&#xff0c;这时候就需要对数据进行清洗。如何实现快速比较…

Selenium基础篇之屏幕截图方法

文章目录 前言一、用途1.捕获页面错误2.调试测试用例3.展示测试结果4.记录页面状态 二、方法1. save_screenshot2. get_screenshot_as_file3. get_screenshot_as_png4. get_screenshot_as_base64 总结 前言 大家好&#xff0c;我是空空star&#xff0c;本篇给大家分享一下Selen…

IDEA+SpringBoot + Mybatis + Shiro+Bootstrap+Mysql智慧仓库系统

IDEASpringBoot Mybatis ShiroBootstrapMysql智慧仓库系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.主页3.货位一览4.入库单5. 库存明细6. 呆滞过期报表7. 转库记录8.入库记录9.出库记录10.出库单11.物料信息12.仓库设置13.用户管理14.操作员管理15.角色管理16.账…

Python实现SMOGN算法解决不平衡数据的回归问题

本文介绍基于Python语言中的smogn包&#xff0c;读取.csv格式的Excel表格文件&#xff0c;实现SMOGN算法&#xff0c;对机器学习、深度学习回归中&#xff0c;训练数据集不平衡的情况加以解决的具体方法。 在不平衡回归问题中&#xff0c;样本数量的不均衡性可能导致模型在预测…

解决Navicat连接Oracle报ORA-28547

《进入Oracle官网》 下载Instant Client Products --------------》Oracle Database download database --------------》Download Oracle Database X Instant Client - C/C Drivers (OCI, OCCI, ODBC) and Utilities Download Now 根据自己的操作系统下载对应的Oracle …

【深入浅出Apache Jackrabbit】第三章 Repository 配置文件

系列文章目录 第一章 初见 Apache Jackrabbit 第二章 Apache Jackrabbit 入门 第三章 Repository 配置文件 第四章 Apache Jackrabbit 文件存储 第五章 Apache Jackrabbit 版本管理 文章目录 系列文章目录一、创建一个 Repository 配置文件二、初始化 Repository Apache Jackr…

基于单片机的智能温控风扇的设计与实现

功能介绍 以STM32单片机作为主控系统&#xff1b; 液晶显示当前温度&#xff0c;风速等级&#xff0c;自动手动模式息&#xff1b; DS18B20检测当前的温度&#xff1b; 按键设置温度上限&#xff1b; 手动模式下&#xff1a; 直接控制风扇档位&#xff0c;可以开启/关闭风扇&a…

DragGAN在Windows11中下载安装

DragGAN是一种颠覆性的新型图像生成和编辑技术&#xff0c;它实现了前所未有的用户对图像创作过程的控制能力。使用DragGAN&#xff0c;用户可以用鼠标拖放的方式在空白画布上概括构思图像&#xff0c;系统会自动生成图像细节。例如&#xff0c;用户可以拖拽画一个矩形作为“汽…