文件之间的输入输出

news2024/10/12 0:24:52

编写2个函数:save stu 和 load stu
save stu:通过 fprintf 将arr数组中的3个学生的所有信息,保存到文件中去
load stu:通过 fscanf 将文件中的3个学生的所有信息,读取到一个新的结构体数组中,并输出所有学生的信息

#include <myhead.h>

/*创建学生结构体*/
typedef struct Student{
	char name[20];
	int id;
	double Chinese;
	double math;
	double English;
	double physical;
	double chemical;
	double biological;
}stu_t;

/*函数声明*/
//1、输入学生信息
void input_message(stu_t *arr);
//2、将学生信息保存到文件中
void save_stu(stu_t *arr);
//3、将文件中学生的信息存入新数组,并输出
void load_stu(stu_t *new);

int main(int argc, const char *argv[])
{
	stu_t arr[3] = {0}; 	/*定义学生数组*/
	input_message(arr);		/*调用输入函数*/
	save_stu(arr); 			/*调用保存信息到文件函数*/
	stu_t new[3] = {0}; 	/*创建新的数组*/
	load_stu(new); 			/*调用将信息存入新数组并输出函数*/
	return 0;
}

//1、输入学生信息
void input_message(stu_t *arr)
{
	printf("请输入学生信息:\n");
	for(int i=0; i<3; i++){
		printf("请输入第%d个学生姓名:",i+1);
		scanf("%s", arr[i].name);
		printf("请输入第%d个学生学号:",i+1);
		scanf("%d", &arr[i].id);
		printf("请输入第%d个学生成绩:\n",i+1);
		printf("语文:");
		scanf("%lf", &arr[i].Chinese);
		printf("数学:");
		scanf("%lf", &arr[i].math);
		printf("英语:");
		scanf("%lf", &arr[i].English);
		printf("物理:");
		scanf("%lf", &arr[i].physical);
		printf("化学:");
		scanf("%lf", &arr[i].chemical);
		printf("生物:");
		scanf("%lf", &arr[i].biological);
	}
}

//2、将学生信息保存到文件中
void save_stu(stu_t *arr)
{
	FILE * fp = fopen("stu.txt" , "w"); /*打开文件*/
	/*判断打开是否成功*/
	if(NULL==fp){
		perror("fopen错误:");
		return;
	}

	/*输出到文件中*/
	for(int i=0; i<3; i++){
		fprintf(fp, "%s\t", arr[i].name);
		fprintf(fp, "%d\n", arr[i].id);
		fprintf(fp, "%.2lf\t", arr[i].Chinese);
		fprintf(fp, "%.2lf\t", arr[i].math);
		fprintf(fp, "%.2lf\n", arr[i].English);
		fprintf(fp, "%.2lf\t", arr[i].physical);
		fprintf(fp, "%.2lf\t", arr[i].chemical);
		fprintf(fp, "%.2lf\n", arr[i].biological);
	}
	fclose(fp); /*关闭文件*/
}

//3、将文件中学生的信息存入新数组,并输出
void load_stu(stu_t *new){
	FILE *fp = fopen("stu.txt", "r"); /*打开文件*/
	/*判断打开是否成功*/
	if(NULL==fp){
		perror("fopen错误:");
		return;
	}

	/*输入到新数组*/
	for(int i=0; i<3; i++){
		fscanf(fp, "%s", new[i].name);
		fscanf(fp, "%d", &new[i].id);
		fscanf(fp, "%lf", &new[i].Chinese);
		fscanf(fp, "%lf", &new[i].math);
		fscanf(fp, "%lf", &new[i].English);
		fscanf(fp, "%lf", &new[i].physical);
		fscanf(fp, "%lf", &new[i].chemical);
		fscanf(fp, "%lf", &new[i].biological);
	}
	printf("=====学生信息=====\n");
	for(int i=0; i<3; i++){	
		printf("姓名:%s\t", new[i].name);
		printf("学号:%d\n", new[i].id);
		printf("成绩:\n");
		printf("语文:%.2lf\t", new[i].Chinese);
		printf("数学:%.2lf\t", new[i].math);
		printf("英语:%.2lf\n", new[i].English);
		printf("物理:%.2lf\t", new[i].physical);
		printf("化学:%.2lf\t", new[i].chemical);
		printf("生物:%.2lf\n", new[i].biological);
	}
	fclose(fp); /*关闭文件*/
}

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

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

相关文章

Basic Pentesting_ 2靶机渗透

项目地址 plain https://download.vulnhub.com/basicpentesting/basic_pentesting_2.tar.gz 修改静态ip 开机按e 输入rw signie init/bin/bash ctrlx 进入编辑这个文件 vi /etc/network/interfaces修改网卡为ens33 保存退出 实验过程 开启靶机虚拟机 ![](https://img-bl…

paimon,基础查询语句测试

基础设置 -- 创建catalog/加载catalog&#xff0c;如果这个catalog已经存在就不会创建&#xff0c;自动加载元数据信息CREATE CATALOG fs_paimon_catalog WITH ( type paimon, warehouse hdfs://wsl01:8020/paimon/catalog ); -- 使用catalog use catalog fs_paimon_catalog…

Java中二维数组-杨辉三角

使用二维数组打印一个10行杨辉三角 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1&#xff09;第一行有1个元素&#xff0c;第n行有n个元素 2&#xff09;每一行的第一个元素和最后一个元素都是1 3&#xff09;从第三行开始&#xff0c;对于非第一个元素和最后一个元素的元素…

差分注意力,负注意力的引入

文章目录 Differential Transformer差分注意力&#xff0c;负注意力的引入相关链接介绍初始化函数多头差分注意力 Differential Transformer差分注意力&#xff0c;负注意力的引入 相关链接 ai-algorithms/README.md at main Jaykef/ai-algorithms (github.com) unilm/Diff…

response和验证码、文件下载操作

目录 Response对象 案例&#xff1a; 1、完成重定向 2、服务器输出字符输出流到浏览器 3、服务器输出字节输出流到浏览器 4、验证码 ServletContext对象 Response对象 功能&#xff1a;设置响应消息 1、设置响应行 格式&#xff1a;HTTP/1.1 200 ok 设置状态码 se…

RabbitMQ 高级特性——死信队列

文章目录 前言死信队列什么是死信常见面试题死信队列的概念&#xff1a;死信的来源&#xff08;造成死信的原因有哪些&#xff09;死信队列的应用场景 前言 前面我们学习了为消息和队列设置 TTL 过期时间&#xff0c;这样可以保证消息的积压&#xff0c;那么对于这些过期了的消…

【更新】上市公司企业机构投资者实地调研数据(2013-2023年)

一、测算方式&#xff1a; 参考《会计研究》逯东&#xff08;2019&#xff09;老师的做法&#xff0c;考虑投资者实地调研的频率和可能性&#xff0c;设立了下述变量来衡量上市公司接待投资者调研情况: 首先&#xff0c;使用年度范围内接待投资者调研的总次数 ( Visitnmb) 作为…

卸载PLSQL及标准卸载流程

目录 1. 卸载PLSQL2. 删除注册表3. 删除数据信息 1. 卸载PLSQL 等待进度条走完 2. 删除注册表 regedit 右击删除 3. 删除数据信息 由于AppData是隐藏文件&#xff0c;需要勾选隐藏的项目。 重启电脑&#xff0c;PLSQL就卸载成功了。

低代码工单管理app评测,功能与效率解析

预计到2030年&#xff0c;低代码平台市场将达1870亿美元。ZohoCreator助力企业构建定制化软件应用&#xff0c;以建筑行业工作订单管理app为例&#xff0c;简化流程&#xff0c;提升管理效率&#xff0c;降低成本。其用户友好界面、自动化管理、跨平台使用及全面报告功能受企业…

项目优化内容及实战

文章目录 事前思考Prometheus 普罗米修斯概述架构安装及使用 Grafana可视化数据库读写分离实战1-PrometheusGrafanaspringboot 事前思考 需要了解清楚&#xff1a;需要从哪些角度去分析实现&#xff1f;使用了缓存&#xff0c;就需要把缓存命中率数据进行收集&#xff1b;使用…

企业在隔离网环境下如何进行安全又稳定的跨网文件交换?

在数字化时代&#xff0c;企业的数据流通如同血液一般重要。然而&#xff0c;当企业内部实施了隔离网环境&#xff0c;跨网文件交换就成了一个棘手的问题。今天我们将探讨在隔离网环境下&#xff0c;企业面临的跨网文件交换挑战&#xff0c;以及如何通过合规的跨网文件交换系统…

数字电路——触发器1(RS和钟控触发器)

触发器&#xff1a;能够存储一位二进制信息的基本单元电路称触发器(Flip-Flop) 特点&#xff1a; 具有两个能自行保持的稳定状态&#xff0c;用来表示逻辑状态的“0”或“1”。具有一对互补输出。有一组控制(激励、驱动)输入。或许有定时(时钟)端CP(Clock Pulse)。在输入信号…

PostgreSQL 16.4安装以及集群部署

1. 环境准备 1.1 主机环境 主机 IP: 192.24.215.121操作系统: CentOS 9PostgreSQL 版本: 16.4 1.2 从机环境 从机 IP: 192.24.215.122操作系统: CentOS 9PostgreSQL 版本: 16.4 2. 安装 PostgreSQL 16.4 在主从两台机器上都需要安装 PostgreSQL 16.4。 2.1 添加 Postgre…

银行卡基础信息查询 API 对接说明

本文将介绍一种 银行卡基础信息查询 API 对接说明&#xff0c;它可用于银行卡基础信息查询。 接下来介绍下 银行卡基础信息查询 API 的对接说明。 申请流程 要使用 API&#xff0c;需要先到 银行卡基础信息查询 API 对应页面申请对应的服务&#xff0c;进入页面之后&#xf…

Python自定义异常类:实际应用示例之最佳实践

Python自定义异常类&#xff1a;实际应用示例之最佳实践 前言 在软件开发中&#xff0c;合理处理异常是保证程序稳定性的重要环节。虽然 Python 内置了丰富的异常类型&#xff0c;但在处理复杂业务逻辑时&#xff0c;自定义异常类能够使代码更加清晰且具备可扩展性。 本文将…

一个架构师的职业素养:四种常用的权限模型

你好,我是看山。 本文收录在《一个架构师的职业素养》专栏。日拱一卒,功不唐捐。 今天咱们一起聊聊权限系统。 以大家熟知的电商场景举例: 用户可以分为普通用户、VIP用户:我们需要控制不同角色用户的访问范围。比如,京东的PLUS会员,可以进入会员专区,而且能够使用礼金…

ESP32接入扣子(Coze) API使用自定义智能体

使用ESP32接入Coze API实现聊天机器人的教程 本示例将使用ESP32开发板通过WiFi接入 Coze API&#xff0c;实现一个简单的聊天机器人功能。用户可以通过串口向机器人输入问题&#xff0c;ESP32将通过Coze API与智能体进行通信&#xff0c;并返回对应的回复。本文将详细介绍了如…

OpenGL 进阶系列03 - OpenGL实例化渲染来提高性能

目录 一:概述 二:实例化渲染的优点: 三:OpenGL实例化渲染的例子: 一:概述 OpenGL 实例化渲染(Instanced Rendering)是一种渲染技术,可以有效地绘制多个相同对象,而不需要为每个对象单独提交绘制调用。通过这种方式,可以显著提高渲染性能,尤其是在需要绘制大量相…

【每日刷题】Day137

【每日刷题】Day137 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; 2. 495. 提莫攻击 - 力扣&#xf…

【数据结构与算法】线性表顺序存储结构

文章目录 一.顺序表的存储结构定义1.1定义1.2 图示1.3结构代码*C语言的内存动态分配 二.顺序表基本运算*参数传递2.1建立2.2初始化(InitList(&L))2.3销毁(DestroyList(&L))2.4判断线性表是否为空表(ListEmpty(L))2.5求线性表的长度(ListLength(L))2.6输出线性表(DispLi…