C語言兩結構體之間的成員互換

椰果奶茶866發表於2022-12-31

今天在寫一個通訊錄實現程式的時候,遇到個讓我突然卡殼的問題,不知道怎麼進行兩個結構體之間的成員互換......結構體成員有“姓名”,“性別”,“年齡”,“地址”,“電話”,目的就是實現一個透過年齡進行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行所示。

相關文章