-
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行所示。
出处:https://www.cnblogs.com/hx2001/p/17017530.html
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式