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