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

        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.hqwc.cn/news/19075.html

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

相关文章

矩形面积 (力扣)数学推理 JAVA

给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形&#xff0c;请你计算并返回两个矩形覆盖的总面积。 每个矩形由其 左下 顶点和 右上 顶点坐标表示&#xff1a; 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。 第二个矩形由其左下顶点 (bx1, b…

AutoDL使用教程

AutoDl是一个租用GPU显卡的平台&#xff0c;我们可以在上面租用显卡。我训练模型的时候租用了一块V100。 下面介绍一下使用AutoDL 来租用GPU显卡&#xff0c;并将自己的代码上传&#xff0c;运行代码。 目录&#xff1a; 创建实例配置环境 pytorch环境上传文件运行代码 一、…

怎么制作查询成绩的网页?这个不用代码的方法你用过没?

作为一名老师&#xff0c;与家长沟通交流是日常工作中重要的一部分。特别是每次考完试后&#xff0c;家长都急切地想了解孩子的成绩&#xff0c;以便能及时了解孩子的学习情况并给予适当的支持和指导。然而&#xff0c;为了保护学生的隐私&#xff0c;大部分学校不公开张榜学生…

IP网络基础

文章目录 数据通信基础数据流方向&#xff08;工作模式&#xff09;网络和Internet简介网络&#xff1a;互联网&#xff1a;总结&#xff1a; 协议和标准标准化组织标准化组织——IETF标准的种类 IP网络基本架构 lP网络在现代社会中有着越来越重要的地位。本课程将介绍数据通信…

Sentry 监控 Docker 方式部署

一、简介 根据主篇 Sentry 监控部署与使用 流程&#xff0c;使用 Docker 方式 方式进行部署。 docker 方式 部署操作比较简单&#xff0c;也是 Sentry 官方 比较推崇的方式&#xff0c;直接按 Sentry On-Premise 提供的方式按部就班部署就好了。或者可直接参考 Docker 部署 Se…

系列五、RocketMQ集群搭建

一、概览 二、集群特点 2.1、NameServer NameServer是一个几乎无状态节点&#xff0c;可集群部署&#xff0c;节点之间无任何信息同步。 2.2、Broker Broker部署相对复杂&#xff0c;Broker分为Master与Slave&#xff0c;一个Master可以对应多个Slave&#xff0c;但是一个Sla…

【vs2022】cmake工程修改绝对路径为工程路径

以libuv为例&#xff0c;只需要修改一个工程文件即可 只需要修改 uv_a.vcxproj 修改内容 工程路径在src/ 同级别的out32/下 $(ProjectDir)… 即可回到 src/路径下。

在Linux中部署Ansible

Ansible是自动化运维工具&#xff0c;基于模块化工作&#xff0c;本身没有批量部署的能力。 Ansible只是提供一种框架&#xff0c;Ansible运行的模块才有批量部署的能力。 Ansible使用SSH协议对设备进行管理&#xff0c;只需在主控端部署Ansible环境&#xff0c;被控端无需做…

Oracle-RAC集群安装root.sh报错问题

问题背景: 在redhat 7.8上安装Oracle11G RAC集群&#xff0c;在节点一执行root.sh脚本时发生错误Disk Group OCRDG creation failed with the following message:ORA-15018: diskgroup cannot be created 问题分析: 从报错信息来看错误是在执行创建OCRDG磁盘组时失败&#xff0…

MySQL数据库,创建表及其插入数据和查询数据

首先&#xff0c;由上图创建表 mysql> create table worker(-> dept_id int(11) not null,-> emp_id int (11) not null,-> work_time date not null,-> salary float(8,2) not null,-> poli_face varchar(10) not null default 群众,-> name varchar(20…

机器学习多步时间序列预测解决方案

近年来&#xff0c;随着机器学习与深度学习的发展机器学习平台的成熟&#xff0c;数据科学家们不再需要关心底层的基础设施及构建复杂的训练与推理环境&#xff0c;从而可以把主要的时间与精力放在数据与算法本身。在机器学习变得更容易的今天&#xff0c;越来越多的传统行业已…

史上最细接口测试详解,接口测试从0到1实施,一篇打通...

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