两同类型结构体成员传递

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值