C语言两结构体之间的成员互换

  • C语言两结构体之间的成员互换已关闭评论
  • 142 次浏览
  • A+
所属分类:.NET技术
摘要

一、结构体的创建代码展示提示:由于通讯录需要19行的size来记录存入的成员个数,所以在这里使用了嵌套的结构体;想要创建1000个有着第七行Pepinfo的结构信息的成员。


今天在写一个通讯录实现程序的时候,遇到个让我突然卡壳的问题,不知道怎么进行两个结构体之间的成员互换......结构体成员有“姓名”,“性别”,“年龄”,“地址”,“电话”,目的就是实现一个通过年龄进行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行所示。