C语言两结构体之间的成员互换
今天在写一个通讯录实现程序的时候,遇到个让我突然卡壳的问题,不知道怎么进行两个结构体之间的成员互换......结构体成员有“姓名”,“性别”,“年龄”,“地址”,“电话”,目的就是实现一个通过年龄进行sort排序的功能,作为一个努力学习的编程小白来说,有太多的东西需要学习了..........代码如下:
一、结构体的创建代码展示
1 #define Max 1000
2 #define Num_Name 10
3 #define Num_Sex 4
4 #define Num_Tele 13
5 #define Num_Address 20
6
7 struct Pepinfo //创建通讯录结构体
8 {
9 char Name[Num_Name];
10 char Sex[Num_Sex];
11 int Age;
12 char Tele[Num_Tele];
13 char Address[Num_Address];
14 };
15
16 struct contact
17 {
18 struct Pepinfo data[Max];
19 int size;
20 };
提示:由于通讯录需要19行的size来记录存入的成员个数,所以在这里使用了嵌套的结构体;想要创建1000个有着第七行Pepinfo的结构信息的成员。
二、main主函数实现代码展示
1 int main()
2 {
3 int input=0;
4 struct contact pepnum;
5 Initpepnum(&pepnum);// 初始化结构体
6 do
7 {
8 menu();// 打印提示信息
9 scanf("%d", &input);
10 switch (input)
11 {
12 case 1:// 增
13 Add(&pepnum);
14 printf("添加成功!");
15 break;
16 case 2:// 删
17 Dele(&pepnum);
18 break;
19 case 3:// 查
20 Search(&pepnum);
21 break;
22 case 4:// 改
23 Modify(&pepnum);
24 break;
25 case 5:// 显示成员信息
26 Show(&pepnum);
27 break;
28 case 6:// 成员排序
29 Sort(&pepnum);
30 break;
31 case 0:// 退出程序
32 printf("操作结束,保存成功!");
33 break;
34 default:
35 printf("输入错误!\n");
36 break;
37 }
38 } while (input);
39 return 0;
40 }
提示:这么些行代码,其实紧要的只有第29行,进行sort的实现。
三、sort函数实现
1 void Sort(struct contact* so)
2 {
3 if (so->size == 0)
4 {
5 printf("通讯录信息不足!\n");
6 }
7 else
8 {
9 for (int j = 0; j <so->size-1 ; j++)
10 {
11 for (int i = 0; i < so->size - 1-j; i++)
12 {
13 struct Pepinfo tmp;
14 if (so->data[i].Age > so->data[i + 1].Age)
15 {
16 //结构体交换
17 tmp = so->data[i];
18 so->data[i] = so->data[i + 1];
19 so->data[i + 1] = tmp;
20 }
21 }
22
23 }
24 }
25 Show(so);
26 printf("排序成功!!\n");
27 };
提示:以上的是正确代码,我之前写的是直接根据年龄进行冒泡排序,排序要交换两个结构体的Age的值,交换之后,其他成员并不会也进行交换,所以在第13行需要再次进行创建一个tmp的结构体作为结构体成员互换的中间站,结构体的成员互换并不需要进行挨个成员进行互换,直接进行整体的交换就可以了,成员之间是会相互对应的,如上图17行到19行所示。
C语言两结构体之间的成员互换的更多相关文章
- C语言 结构体中的成员域偏移量
		//C语言中结构体中的成员域偏移量 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> # ... 
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
		原文链接:C语言结构体里的成员数组和指针 复制例如以下: 单看这文章的标题,你可能会认为好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Lar ... 
- 在C语言结构体中添加成员函数
		我们在使用C语言的结构体时,经常都是只定义几个成员变量,而学过面向对象的人应该知道,我们定义类时,不只是定义了成员变量,还定义了成员方法,而类的结构和结构体非常的相似,所以,为什么不想想如何在C语言结 ... 
- C语言中 不定义结构体变量求成员大小
		所谓的求成员大小, 是求成员在该结构体中 用 sizeof(结构体名.结构体成员名) 求来的. 很多时候我们需要知道一个结构体成员中的某个成员的大小, 但是我们又不需要定义该结构体类型的变量(定义的话 ... 
- C语言中结构体对齐问题
		C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ... 
- C语言中结构体赋值问题的讨论
		今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ... 
- 01.C语言关于结构体的学习笔记
		我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ... 
- C语言之结构体
		结构体类型 C语言中还有一种类型叫做结构体类型,它是可以保存不同类型数据并且可以把这些不同类型的数据当做一个整体来管理的类型 1).结构体的定义 语法: struct 结构体名{ 成员列表; }; ... 
- C语言-结构体
		C语言中数组是把相同类型的数据类型的变量集中在一起了,而结构体则是把不同类型的变量聚集在一起. 结构体也是一种数据类型,但是它是一种自定义的数据类型,也就是说和使用其他数据类型不一样,我们得先定义这种 ... 
- 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式
		逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ... 
随机推荐
- 实例分析Scheduled Thread Pool Executor与Timer的区别
			摘要:JDK 1.5开始提供Scheduled Thread PoolExecutor类,Scheduled Thread Pool Executor类继承Thread Pool Executor类重 ... 
- Spring Boot 配置 jar 包外面的 Properties 配置文件
			一.概述 Properties 文件是我们可以用来存储项目特定信息的常用方法.理想情况下,我们应该将其保留在 jar 包之外,以便能够根据需要对配置进行更改. 在这个教程中,我们将研究在 Spring ... 
- 商品期货通用模型JF1
			更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 行情不确定性加剧 回顾2022年上半年的期货市场行情,在一个个宏观事件的不断冲击下,期货市场的不确定性加 ... 
- 通过 Github Action 实现定时推送天气预报
			偶然间,看到 GitHub Actions 教程:定时发送天气邮件 - 阮一峰的网络日志 这篇文章,没错,这个正好能打发自己的折腾之心,也能通过代码给生活引入一些变化. 还是在这里简单记录一下实现过程 ... 
- 一次 Redis 事务使用不当引发的生产事故
			这是悟空的第 170 篇原创文章 官网:http://www.passjava.cn 你好,我是悟空. 本文主要内容如下: 一.前言 最近项目的生产环境遇到一个奇怪的问题: 现象:每天早上客服人员在后 ... 
- 第三方代开的微信小程序更换管理员
			(1) 由于第三方代开小程序默认管理员是法人.首先使用法人微信搜索"小程序助手"小程序 (2)点击进入"小程序助手",即可看到自己企业名下未更换管理员的小程序 ... 
- 万字详解JVM,让你一文吃透
			摘要:本文将带大家详细地了解关于JVM的一些知识点. 本文分享自华为云社区<[JVM]关于JVM,你需要掌握这些 | 一文彻底吃透JVM系列>,作者: 冰 河 . JDK 是什么? JDK ... 
- 廖---list tuple dic set
			list 有序集合,可随时添加和删除其中的数据. 在 Python 列表中删除元素主要分为以下 3 种场景: 根据目标元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法: 根据 ... 
- onps栈使用说明(1)——API接口手册
			1. 底层API 由协议栈底层提供的api,用于涉及底层操作的一些功能实现,这些api接口函数的原型定义分布于不同的文件,它们被统一include进了onps.h中: open_npstack_loa ... 
- WPF之BackgroundWorker
			BackgroundWorker类允许您在单独的线程上执行某个可能导致用户界面(UI)停止响应的耗时操作,下面来介绍一下这个线程类BackgroundWorker,大家可以结合这位大佬的这篇文章,说的 ... 
