5

C语言两结构体之间的成员互换 - 椰果奶茶866

 1 year ago
source link: https://www.cnblogs.com/hx2001/p/17017530.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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行所示。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK