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

今天在写一个通讯录实现程序的时候,遇到个让我突然卡壳的问题,不知道怎么进行两个结构体之间的成员互换。

结构体成员有姓名、性别、年龄、地址、电话,目的就是实现一个通过年龄进行sort排序的功能。代码如下:

一、结构体的创建代码

#define Max 1000
#define Num_Name 10
#define Num_Sex 4
#define Num_Tele 13
#define Num_Address 20

struct Pepinfo //创建通讯录结构体
{
    char Name[Num_Name];
    char Sex[Num_Sex];
    int Age;
    char Tele[Num_Tele];
    char Address[Num_Address];
};

struct contact
{
    struct Pepinfo data[Max];
    int size;
};


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

二、main主函数实现代码展示

int main()
{
    int input=0;
    struct contact pepnum;
    Initpepnum(&pepnum);// 初始化结构体
    do
    {
        menu();// 打印提示信息
        scanf("%d", &input);
        switch (input)
        {
        case 1:// 增
            Add(&pepnum);
            printf("添加成功!");
            break;
        case 2:// 删
            Dele(&pepnum);
            break;
        case 3:// 查
            Search(&pepnum);
            break;
        case 4:// 改
            Modify(&pepnum);
            break;
        case 5:// 显示成员信息
            Show(&pepnum);
            break;
        case 6:// 成员排序
            Sort(&pepnum);
            break;
        case 0:// 退出程序
            printf("操作结束,保存成功!");
            break;
        default:
            printf("输入错误!\n");
            break;
        }
    } while (input);
    return 0;
}

提示:这么些行代码,其实紧要的只有第29行,进行sort的实现。


三、sort函数实现

void Sort(struct contact* so)
{
    if (so->size == 0)
    {
        printf("通讯录信息不足!\n");
    }
    else
    {
        for (int j = 0; j <so->size-1 ; j++)
        {
            for (int i = 0; i < so->size - 1-j; i++)
            {
                struct Pepinfo tmp;
                if (so->data[i].Age > so->data[i + 1].Age)
                {
                    //结构体交换
                    tmp = so->data[i];
                    so->data[i] = so->data[i + 1];
                    so->data[i + 1] = tmp;
                }
            }

        }
    }
    Show(so);
    printf("排序成功!!\n");
};

提示:以上的是正确代码,我之前写的是直接根据年龄进行冒泡排序,排序要交换两个结构体的Age的值,交换之后,其他成员并不会也进行交换,所以在第13行需要再次进行创建一个tmp的结构体作为结构体成员互换的中间站,结构体的成员互换并不需要进行挨个成员进行互换,直接进行整体的交换就可以了,成员之间是会相互对应的,如上图17行到19行所示。