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

C语言两结构体之间的成员互换的更多相关文章

  1. C语言 结构体中的成员域偏移量

    //C语言中结构体中的成员域偏移量 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> # ...

  2. 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组

    原文链接:C语言结构体里的成员数组和指针 复制例如以下: 单看这文章的标题,你可能会认为好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Lar ...

  3. 在C语言结构体中添加成员函数

    我们在使用C语言的结构体时,经常都是只定义几个成员变量,而学过面向对象的人应该知道,我们定义类时,不只是定义了成员变量,还定义了成员方法,而类的结构和结构体非常的相似,所以,为什么不想想如何在C语言结 ...

  4. C语言中 不定义结构体变量求成员大小

    所谓的求成员大小, 是求成员在该结构体中 用 sizeof(结构体名.结构体成员名) 求来的. 很多时候我们需要知道一个结构体成员中的某个成员的大小, 但是我们又不需要定义该结构体类型的变量(定义的话 ...

  5. C语言中结构体对齐问题

    C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...

  6. C语言中结构体赋值问题的讨论

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  7. 01.C语言关于结构体的学习笔记

    我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...

  8. C语言之结构体

    结构体类型 C语言中还有一种类型叫做结构体类型,它是可以保存不同类型数据并且可以把这些不同类型的数据当做一个整体来管理的类型 1).结构体的定义 语法: struct 结构体名{ 成员列表; };   ...

  9. C语言-结构体

    C语言中数组是把相同类型的数据类型的变量集中在一起了,而结构体则是把不同类型的变量聚集在一起. 结构体也是一种数据类型,但是它是一种自定义的数据类型,也就是说和使用其他数据类型不一样,我们得先定义这种 ...

  10. 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式

    逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...

随机推荐

  1. 洛谷P7167 [eJOI 2020 Day1] Fountain (单调栈+ST)

    开两个数组:to[i][j]表示从i这个位置向下的第2j个圆盘是哪个,f[i][j]表示流满从i这个位置向下的 2j 个圆盘需要多少体积的水. 详情见代码: 1 #include<bits/st ...

  2. centos7搭建安装loki、promtail、Grafana日志系统

    loki.promtail.Grafana安装包 链接:https://pan.baidu.com/s/1vkSa_KYrXM0UEI8i42KdaA 提取码:4d4q 如果安装失败或者下载速度慢可以 ...

  3. 齐博x1标签实例:调用多个圈子同时调用相关会员

    看这一篇之前,请先看上一篇,因为他们有关联性比如要实现这样的效果 可以通过下面的代码可以实现 {qb:tag name="xxx" type="qun" row ...

  4. eDP接口简介

    1. eDP背景介绍   随着显示分辨率的越来越高,传统的VGA.DVI等接口逐渐不能满足人们的视觉需求. 随后就产生了以HDMI.DisplayPort为代表的新型数字接口,外部接口方面HDMI占据 ...

  5. JS中的键盘Keycode

    常用的keycode 组合键 if ((window.event.ctrlKey)&&(window.event.keyCode==49)) alert("您按下了CTRL+ ...

  6. day03-CSS

    CSS 1.css介绍 css指的是层叠样式表(cascading style sheets) 官方文档:https://www.w3school.com.cn/css/index.asp 为什么需要 ...

  7. Java函数式编程:二、高阶函数,闭包,函数组合以及柯里化

    承接上文:Java函数式编程:一.函数式接口,lambda表达式和方法引用 这次来聊聊函数式编程中其他的几个比较重要的概念和技术,从而使得我们能更深刻的掌握Java中的函数式编程. 本篇博客主要聊聊以 ...

  8. 云原生之旅 - 8)云原生时代的网关 Ingress Nginx

    前言 当我们在Kubernetes部署的服务需要暴露给外部用户使用时,有三种选择:LoadBalancer,NodePort, Ingress. LoadBalancer类型得结合各个Cloud Pr ...

  9. 动态爱心-详细教程(小白也会)(HTML)

    动态爱心 超级超级超级简单!!!赶紧做给你们的"Ta"看吧! (最后有详细步骤) 视频效果: 话不多说直接上代码 点击查看代码 <!DOCTYPE HTML PUBLIC & ...

  10. 图扑软件 3D 组态编辑器,低代码零代码构建数字孪生工厂

    行业背景 随着中国制造 2025 计划的提出,新一轮的工业改革拉开序幕.大数据积累的指数级增长为智能商业爆发奠定了良好的基础,传统制造业高污染.高能耗.低效率的生产模式已不符合现代工业要求. 图扑拖拽 ...