C //例10.4 从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去。

C程序设计 (第四版) 谭浩强 例10.4

例10.4 从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去。

IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。

 

代码块
方法:使用指针,函数的模块化设计,动态分配内存
说明:这里准备先写入的文件名称为Test.txt,文件已经存在于该项目目录下。
#include <stdio.h>
#include <stdlib.h>#define N 10//定义学生结构体
typedef struct{int num;char name[20];int age;char addr[15];
}Student;//初始化变量
void initialVar(Student **stu, int n, char **name){*stu = (Student*)malloc(n * sizeof(Student));*name = (char*)malloc(20 * sizeof(char));
}//输入学生信息
void inputStu(Student *stu, int n){printf("Enter %d students info:\n\n", n);int i = 0;for(Student *p = stu; p < stu + n; p++, i++){printf("Enter No.%d student number(100 ~ 999): ", i + 1);scanf("%d", &p->num);while(p->num < 100 || p->num > 999){printf("Number Error! Retry!\nEnter No.%d student number(100 ~ 999): ", i + 1);scanf("%d", &p->num);}fflush(stdin);printf("Enter No.%d studnet name: ", i + 1);gets(p->name);printf("Enter No.%d student age(6 ~ 35): ", i + 1);scanf("%d", &p->age);while(p->age < 6 || p->age > 35){printf("Age Error! Retry!\nEnter No.%d student age(6 ~ 35): ", i + 1);scanf("%d", &p->age);}fflush(stdin);printf("Enter No.%d student address: ", i + 1);scanf("%s", p->addr);printf("\n");}printf("\n");
}//输出学生信息
void outputStu(Student *stu, int n){printf("Student Info:\n");for(Student *p = stu; p < stu + n; p++){printf("Number: %-3d  Name: %-10s  Age: %-2d  Address: %-8s\n", p->num, p->name, p->age, p->addr);}printf("\n");
}//输入文件名并判断
void inputFileName(FILE **file, char *name){printf("Enter File Name: ");scanf("%s", name);*file = fopen(name, "rb");if(*file == NULL){perror("Cannot open this file");system("pause");exit(0);}*file = fopen(name, "wb");
}//将学生信息写入文件
void inputFile(FILE **file, Student *stu, int n){for(int i = 0; i < n; i++){if(fwrite(&stu[i], sizeof(Student), 1, *file) != 1){perror("File write error");system("pause");exit(0);}}fclose(*file);
}//读取文件中的学生信息
void outputFile(FILE **file, char *name, Student *stu, int n){*file = fopen(name, "rb");if(*file == NULL){perror("Cannot open this file");system("pause");exit(0);}printf("Read Student Info:\n");for(int i = 0; i < n; i++){fread(&stu[i], sizeof(Student), 1, *file);printf("Number: %-3d  Name: %-10s  Age: %-2d  Address: %-8s\n", stu[i].num, stu[i].name, stu[i].age, stu[i].addr);}printf("\n");fclose(*file);
}//释放变量内存
void freeVar(Student **stu, char **name){free(*stu);free(*name);
}int main(){FILE *file = NULL;Student *stu = NULL;char *name = NULL;initialVar(&stu, N, &name);inputStu(stu, N);outputStu(stu, N);inputFileName(&file, name);inputFile(&file, stu, N);outputFile(&file, name, stu, N);freeVar(&stu, &name);system("pause");return 0;
}
运行结果如下:

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

一次显著的性能提升,从8s到0.7s

前言 最近我在公司优化了一些慢查询SQL&#xff0c;积累了一些SOL调优的实战经验。 这篇文章从实战的角度出发&#xff0c;给大家分享一下如何做SQL调优。 经过两次优化之后&#xff0c;慢SQL的性能显著提升了&#xff0c;耗时从8s优化到了0.7s。 现在拿出来给大家分享一下…

老老实实的程序员该如何描述自己的缺点

答辩的时候&#xff0c;晋升的时候&#xff0c;面试的时候&#xff0c;你有没有经常遇到一个问题&#xff0c;那就是你觉得自己有什么缺点吗&#xff1f; 目录 1. 每个人都有缺点 2. 这道题在考什么&#xff1f; 3. 我之前是怎么回答的 4. 你可以这样回答试一试 5. 总结 …

ECharts的颜色渐变

目录 一、直接配置参数实现颜色渐变 二、使用ECharts自带的方法实现颜色渐变 一、两种渐变的实现方法 1、直接配置参数实现颜色渐变 横向的渐变&#xff1a; //主要代码 option {xAxis: {type: category,boundaryGap: false,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yA…

路径规划之PRM算法

系列文章目录 路径规划之Dijkstra算法 路径规划之Best-First Search算法 路径规划之A *算法 路径规划之D *算法 路径规划之PRM算法 路径规划之PRM算法 系列文章目录前言一、前期准备1.栅格地图2.采样3.路标 二、PRM算法1.起源2.流程3. 优缺点4. 实际效果 前言 之前提到的几种…

如何解决el-table中动态添加固定列时出现的行错位

问题描述 在使用el-table组件时&#xff0c;我们有时需要根据用户的操作动态地添加或删除一些固定列&#xff0c;例如操作列或选择列。但是&#xff0c;当我们使用v-if指令来控制固定列的显示或隐藏时&#xff0c;可能会出现表格的行错位的问题&#xff0c;即固定列和非固定列…

【Unity动画】Sprite 2D精灵创建编辑到动画

如何切图&#xff08;sprite editor&#xff09; 有时候一张图可能包含了很多张子图&#xff0c;就需要在Unity 临时处理一下&#xff0c;切开&#xff0c;比如动画序列帧图集 虽然我们可以在PS里面逐个切成一样的尺寸导出多张&#xff0c;再放回Unity&#xff0c;但是不需要这…

深入理解数据在内存中是如何存储的,位移操作符如何使用(能看懂文字就能明白系列)文章超长,慢慢品尝

系列文章目录 C语言笔记专栏 能看懂文字就能明白系列 &#x1f31f; 个人主页&#xff1a;古德猫宁- &#x1f308; 信念如阳光&#xff0c;照亮前行的每一步 文章目录 系列文章目录&#x1f308; *信念如阳光&#xff0c;照亮前行的每一步* 前言引子一、2进制和进制转化为什么…

Docker部署开源分布式任务调度系统DolphinScheduler与远程访问办公

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…

万能神器,轻松制作电子画册

你是不是经常需要制作各种宣传画册、产品画册、企业画册等等&#xff1f;是不是觉得手工制作太麻烦&#xff0c;而且效果也不尽如人意&#xff1f;现在有了这个神器&#xff0c;一切都可以轻松搞定&#xff01; FLBOOK在线制作电子杂志平台&#xff0c;一款功能强大的电子画册制…

数据结构与算法(五)回溯算法(Java)

目录 一、简介1.1 定义1.2 特性1.3 结点知识补充1.4 剪枝函数1.5 使用场景1.6 解空间1.7 实现模板 二、经典示例2.1 0-1 背包问题2.2 N皇后问题 一、简介 1.1 定义 回溯法&#xff08;back tracking&#xff09;是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条…

Linux下查看端口占用

第一种&#xff1a;通过命令查看 1.netstat -ntulp&#xff1a;查看所有的被占用的端口 在列表中最后一列就列出了&#xff0c;某个端口被占用的进程 其中&#xff1a; -t : 指明显示TCP端口 -u : 指明显示UDP端口 -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收…

2023人工智能和市场营销的融合报告:创造性合作的新时代需要新的原则

今天分享的人工智能系列深度研究报告&#xff1a;《2023人工智能和市场营销的融合报告&#xff1a;创造性合作的新时代需要新的原则》。 &#xff08;报告出品方&#xff1a;M&CSAATCHITHINKS&#xff09; 报告共计&#xff1a;11页 生成型人工智能的兴起和重要性 生成式…