首页 > 其他分享 >C语言两结构体之间的成员互换

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

时间:2022-12-31 23:12:57浏览次数:37  
标签:case 成员 C语言 break Num so 互换 data pepnum

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

标签:case,成员,C语言,break,Num,so,互换,data,pepnum
From: https://www.cnblogs.com/hx2001/p/17017530.html

相关文章

  • 用c语言将三个数字从大到小排列
    #include<stdio.h>intmain(){inta=0;intb=0;intc=0;scanf("%d%d%d",&a,&b,&c);//先确定最大值a,然后比较b和c的大小if(a<b){inttmp=a;a=b;b=......
  • 初识C语言,两变量相加
    #include<stdio.h>intmain(){intnum1=0;intnum2=0;printf("输入两个整数,用逗号隔开:");scanf_s("%d,%d",&num1,&num2);//&表示取地址符号printf("num1=%......
  • C语言中的标识符
    如果说道C语言中的标识符,估计很多人就是:标识符是数字、下划线、小写及大写拉丁字母。但是也可以以 \u 及 \U 转义记号指定的Unicode字符 (C99起)的任意长度序列。......
  • 数据结构与算法(C语言 严蔚敏)二
    前言有误的地方还请大家指出来,我会一一改正,也会在评论区置顶更正的记录;如果是因为不同的教材导致的错误,请把教材名、著作者、版次一并提供,供大家一起督促一起学习,本篇参考......
  • asm: gcc - c语言的内联汇编学习(linux_gcc_c)
    asm: gcc-c语言的内联汇编学习(linux_gcc_c)    一、基本说明 1、操作系统:rockylinux9[root@rockyc]#uname-a......
  • 浅谈C语言编译原理
    C语言我们在学习计算机学科时,往往最先接触到的编程语言是C,它是所有语言中,最接近底层的高级语言之一,因而它具有执行速度快的优点。但它又具有开发周期长和对于经验不足......
  • 用c语言打印1000到2000的闰年
    #include<stdio.h>intmain(){intyeaar=0;for(year=1000;year<=2000;year++){if(year%4==0&&year%100!=0)printf("%d",year);elaeif(year%400==0)......
  • C语言有符号数和无符号数的左移和右移
    参考:https://blog.csdn.net/xiaohuihui1994/article/details/110498343?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-......
  • C语言--函数2--递归1
    8、递归函数直接或间接调用函数本身“自己调用自己”解决一个问题时,解决思路化成与问题本身类似的问题的时候=>递归C语言能够解决的递归问题满足两个条件:a问......
  • 刷题笔记——1112:C语言考试练习题_一元二次方程
    题目1112:C语言考试练习题_一元二次方程代码importmathwhileTrue: try: a,b,c=map(float,input().strip().split()) delta=b*b-4*a*c x1=(-b+......