C语言-结构体+文件操作+排序练习

2023-05-16

目录

      • 相关定义
      • 主函数
      • 数据写入结构体函数
      • 结构体数据遍历写入文件函数
      • 读取文件数据函数
      • 数据排序函数
      • 数据遍历输出函数

运行程序打开终端输入一组员工数据,输入自定的文件名进行存储。
读取该文件保存的内容,进行排序并输出

相关定义


宏定义指定长度,方便操作
创建一个枚举,识别性别数据
来一个char数组,用于存储用户输入的文件名
定义一个结构体,用于保存员工数据


#define N 2	//长度 
enum sex{male,female};   //性别枚举
char filename[20];		//存放文件名

//定义一个员工结构体
typedef struct employee{
	char id[20];
	char name[20];
	enum sex sex1;
	float salary;
}EMP;

主函数


含五个方法,第一个直接遍历输入指定个数的数据
writeFile:将数据写入文件的函数
readFile:读取文件数据并输出终端的函数
sort:将数据按照名字进行排序
output:遍历数据输出的函数


int main()
{
	EMP employee[N];//来一个结构体数组
	int i;
	//循环遍历添加数据 
	for(i=0;i<N;i++){
		input(&employee[i]);
	} 
	//将结构体数组数据写入文件
	writeFile(employee); 
//	读取文件的内容并输出于终端显示
	readFile(employee); 
//	文件读取并排序
	sort(employee); 
	
    printf("*****排序中,请等待!**********\n************排序结束************\n");
//    遍历输出排序后的结构体
	output(employee); 
	return 0;
}

数据写入结构体函数


每次执行之前,刷新文件缓冲区


//输入结构体数据 
void input(EMP *ep)
{
//	首先清空缓冲区
		fflush(stdin);
		printf("请输入员工工号:");
		gets(ep->id);
		printf("请输入员工姓名:");
		gets(ep->name);
		printf("请输入员工性别 0-男;1-女:");
		scanf("%d",&ep->sex1);
		printf("请输入员工工资:");
		scanf("%f",&ep->salary);
}

结构体数据遍历写入文件函数


打开文件
遍历数据—>写入数据
关闭文件


void writeFile(EMP *p){
	FILE *fp;
	printf("请输入文件名:");
	scanf("%s",filename);
	if( (fp=fopen(filename,"w")) == NULL )
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	printf("正在写入文件...\n");
	int i;
	for(i=0;i<N;i++){
//		两个参数,第一个文件指针 
		fprintf(fp,"%s\t%s\t%d\t%.2f\n",p[i].id,p[i].name,p[i].sex1,p[i].salary);
	}
	printf("文件已写入\n");
	fclose(fp);//关闭文件 
} 

读取文件数据函数


打开文件
遍历数据—>读取数据存放到指定位置
关闭文件


void readFile(EMP *p){
	FILE *fp;
	int i;
	if( (fp=fopen(filename,"r")) ==NULL ){
		printf("打开文件失败\n");
		exit(0); 
	}
	 printf("开始读文件..............\n");
	for(i=0;i<N;i++){
		fscanf(fp,"%s\t%s\t%d\t%.2f\n",p[i].id,p[i].name,&p[i].sex1,&p[i].salary);
		fprintf(stdout,"%s\t%s\t%d\t%.2f\n",p[i].id,p[i].name,p[i].sex1,p[i].salary);
	}
	printf("员工信息已读取!\n");
	fclose(fp);
}

数据排序函数


遍历—>比大小—>更换索引值—>更换数据



void sort(EMP *p){
	int i,j,k;
	EMP temp;
	for(i=0;i<N-1;i++){
		k=i;
		for(j=i+1;j<N;j++){
			if(strcmp(p[k].name,p[j].name)>0){
				k=j;
			}
		}
		temp = p[i];p[i] = p[k];p[k] = temp;
	}
} 

数据遍历输出函数


遍历数据
根据枚举断定性别
输出数据


void output(EMP *p){
	int i;
	printf("工号	姓名	性别	工资\n");
	for(i=0;i<N;i++){
		printf("%s\t%s\t",p[i].id,p[i].name);
		if(p[i].sex1==0)
		printf("男\t");
		else
		printf("女\t");
		printf("%.2f\n",p[i].salary);
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言-结构体+文件操作+排序练习 的相关文章

随机推荐

  • 牛客HJ20 密码验证合格程序

    描述 密码要求 1 长度超过8位 2 包括大小写字母 数字 其它符号 以上四种至少三种 3 不能有长度大于2的包含公共元素的子串重复 xff08 注 xff1a 其他符号不含空格或换行 xff09 输入描述 xff1a 一组字符串 输出描述
  • React useEffect vs useLayoutEffect

    两者的区别 两者的函数签名是一样的 xff0c 即用法一样 两者的区别在于执行时机不同 useEffect是在DOM的变化渲染到屏幕后异步执行的useLayoutEffect是在DOM变化后渲染前同步执行的 因此从执行时机上看 xff0c
  • 单片机产生二维8*8随机数

    代码可运行 span class token keyword void span span class token function Random span span class token punctuation span span cl
  • React useCallback 函数使用说明

    React 中useCallback的作用 xff1a 函数相等性检查 useCallback 的函数原型 xff1a useCallback callbackFun deps 如果deps给出的依赖值不变 xff0c 则useCallba
  • thinkpad t400在fedora 17上风扇转速调整

    作者 xff1a bigluo 转自 xff1a http blog chinaunix net uid 796091 id 3282943 html 在t400上安装了fedora 17 在编译代码的时候经常碰到下面的严重警告 xff0c
  • Python 把秒数转换为xx:xx:xx的时间格式

    题目要求是将给出的秒数转化为xx xx xx的格式 xff0c 最大秒数默认不超过359999 xff0c 即99 59 59 解题思路是利用除法的取整和取余运算 xff0c 从最高位计算到最低位 xff0c 只需根据题设注意时分秒各自的进
  • warning : 无法找到 v142 的生成工具。安装 v142 可使用 v142 生成工具进行生成。

    我使用的是vs2017 xff0c 同伴的是vs2019 xff0c 他发送了他写的项目给我 xff0c 因为使用的vs版本不同 工具集不同 xff0c 导致项目在我的电脑上编译会有如下报错 xff1a warning 无法找到 v142
  • 用栈判断是否是回文

    用栈判断是否是回文 栈 xff1a 仅在表尾进行插入和删除操作的线性表 先进后出 用例 xff1a 1 上海自来水来自海上 2 1234321 3 123321 4 112233 5 123332 思路 xff1a 直接入栈一半的元素 xf
  • VirtualBox安装Arch Linux

    xff08 转载自http www aichengxu com view 34792 xff0c 略有改动 xff09 所有步骤用于指导新手完成archlinux在虚拟机上的安装 xff0c 安装选择未必最优 xff0c 但尽力做到减少新手
  • KEIL UV5 一模一样的程序,编译突然就有问题了

    原来是系统时间调到2000年 xff0c 没有调回来 把时间调回来就可以了
  • 简单选择排序——C语言实现

    选择排序思想 xff1a 若按照递增顺序对顺序表进行排列 xff0c 在n个元素的顺序表中 xff0c 从第i xff08 i 61 1 xff09 个元素开始遍历到第n 1个元素 xff0c 在遍历过程中都将第i个元素依次与第i 43 1
  • php7+操作 MongoDB4.0

    php7 43 操作 MongoDB4 0 一 连接MongoDB服务 mongo 61 new MongoDB Driver Manager 34 mongodb localhost 27017 34 二 添加数据 实例化一个添加类 bu
  • centos图形界面的开启和关闭

    centos图形界面的开启和关闭 一般来说centos主要用于服务器端 xff0c 所以很少开启图形化界面 xff0c 但是有时候为了工作方便也会偶尔开启图形界面 xff0c 下面就让简单谈谈如何开启图形化界面 xff0c 当然简化安装是没
  • 远程连接——NoMachine

    参考文章 安装并使用NoMachine关于nomachine无法连接NX的问题 小贴士 在使用NoMachine的时候 xff0c 需要主机和从机都需要开启NoMachine软件长时间没连接NoMachine xff0c 可能会出现NoMa
  • c++ regex的一个错误?

    下面的代码怎么了 xff1f 为何for换内部不执行 xff1f include lt string gt include lt iostream gt include lt regex gt include lt fstream gt u
  • 如何使用bat脚本批量创建txt文档

    如何使用bat脚本批量创建txt文档 有时候需要批量创建自定义名字的txt文件一遍后续写入数据 xff1a 64 echo off span class token keyword for span f span class token s
  • 转载_debian图形界面安装[转]

    安装GNOME中文桌面环境 安装基本的X系统 apt get install x window system core 安装GNOME桌面环境 apt get install gnome 到现在为止 xff0c 我们已成功安装完成gnome
  • C语言之printf输出中文乱码

    C语言之printf输出中文乱码 不同编辑器问题解决方案Clion编辑器 不同编辑器问题解决方案 根据不同的编辑器的表现进行针对性的处理 Clion编辑器 按照以下步骤操作编辑器设置即可 xff1a File gt Setting xff0
  • win11 系统暂无可用音频设备导致播放失败/音频服务未响应

    win11 系统暂无可用音频设备导致播放失败 音频服务未响应 win11再一次更新后音频突然用不了了 xff0c 驱动和输出设备都显示正常 xff0c 但每次播放就会出现下面的问题 xff0c 重启和更新驱动也没用 最后百度了好久终于解决了
  • C语言-结构体+文件操作+排序练习

    目录 相关定义主函数数据写入结构体函数结构体数据遍历写入文件函数读取文件数据函数数据排序函数数据遍历输出函数 运行程序打开终端输入一组员工数据 xff0c 输入自定的文件名进行存储 读取该文件保存的内容 xff0c 进行排序并输出 相关定义