飞不高 发表于 2023-1-1 04:38:09

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;
10   char Sex;
11   int Age;
12   char Tele;
13   char Address;
14 };
15
16 struct contact
17 {
18   struct Pepinfo data;
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.Age > so->data.Age)
15               {
16                     //结构体交换
17                     tmp = so->data;
18                     so->data = so->data;
19                     so->data = tmp;
20               }
21             }
22
23         }
24   }
25   Show(so);
26   printf("排序成功!!\n");
27 };提示:以上的是正确代码,我之前写的是直接根据年龄进行冒泡排序,排序要交换两个结构体的Age的值,交换之后,其他成员并不会也进行交换,所以在第13行需要再次进行创建一个tmp的结构体作为结构体成员互换的中间站,结构体的成员互换并不需要进行挨个成员进行互换,直接进行整体的交换就可以了,成员之间是会相互对应的,如上图17行到19行所示。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: C语言两结构体之间的成员互换