C语言通过键盘输入给结构体内嵌的结构体赋值——指针法

1 需求

以录入学生信息(姓名、学号、性别、出生日期)为例,首先通过键盘输入需要录入的学生的数量,再依次输入这些学生的信息,输入完成后输出所有信息。

2 代码

#include<stdio.h>
#include<stdlib.h>// 定义结构体,并取别名为Date 
typedef struct {int year;int month;int day;
}Date; // 定义结构体,并取别名为Student 
typedef struct {char name[9];char number[5];char sex[3];Date birthday; // 内嵌结构体Date 
}Student;int main() {int count;printf("请输入需要录入的学生数量:");scanf("%d", &count);printf("\n请依次输入每个学生的信息:\n\n姓名\t学号\t性别\t出生日期\n");// 由于不能使用变量定义数组Student stuArray[count];// 所以采用指针,并通过动态内存分配来实现 // 在堆中申请一部分连续的内存空间用来存储输入的信息 // 并使Student *类型的指针变量stuPoint指向此空间的首地址Student *stuPoint = (Student*)malloc(count * sizeof(Student));// 动态内存分配可能失败,若失败,则程序直接退出 if (stuPoint == NULL) {exit(1);}// 定义第二个指针stuTempPoint1,使它和stuPoint指向同一个位置 // 当输入完一个学生后,stuTempPoint1往下移,直至输入完所有学生// 输入完所有学生后,该指针就指向了没有学生信息的位置(相当于“废了”)// 其实呢,也可以继续用,只要再往上移,移回去就行了Student *stuTempPoint1 = stuPoint;for(int i = 0; i < count; i++, stuTempPoint1++) {scanf("%s%s%s%d%d%d", stuTempPoint1 -> name, stuTempPoint1 -> number, stuTempPoint1 -> sex, &stuTempPoint1 -> birthday.year, &stuTempPoint1 -> birthday.month,&stuTempPoint1 -> birthday.day);}printf("\n\n================================\n\n");// 定义第三个指针stuTempPoint2,使它和stuPoint指向同一个位置 // 每输出完一个学生信息后,指针下移,全部输出完毕后该指针也相当于“跪了”Student *stuTempPoint2 = stuPoint;for(int i = 0; i < count; i++, stuTempPoint2++) {printf("姓名:%s\t学号:%s\t性别:%s\t出生日期:%d年%d月%d日\n", stuTempPoint2 -> name, stuTempPoint2 -> number, stuTempPoint2 -> sex, stuTempPoint2 -> birthday.year, stuTempPoint2 -> birthday.month,stuTempPoint2 -> birthday.day);}printf("\n\nstuTempPoint1指针往上移之后,再次利用================================\n\n");// 回到原始位置 stuTempPoint1 -= count;// 再一顿输出 for(int i = 0; i < count; i++, stuTempPoint1++) {printf("姓名:%s\t学号:%s\t性别:%s\t出生日期:%d年%d月%d日\n", stuTempPoint1 -> name, stuTempPoint1 -> number, stuTempPoint1 -> sex, stuTempPoint1 -> birthday.year, stuTempPoint1 -> birthday.month,stuTempPoint1 -> birthday.day);}// 释放刚刚申请的内存空间(一定要释放!) free(stuPoint);return 0;
}

3 运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/313049.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React - 基础学习

React基础 React更新视图的流程 是 一层一层查找 到对应的视图做更新 如何生成React工程 // 生成简单的react npx create-react-app react-app// 生成typescript的react npx create-react-app react-app-ts --template typescriptReact的基本能力 父子组件 // 父组…

openGauss学习笔记-265 openGauss性能调优-TPCC性能调优测试指导-操作系统配置

文章目录 openGauss学习笔记-265 openGauss性能调优-TPCC性能调优测试指导-操作系统配置265.1安装openEuler操作系统265.2 修改操作系统内核PAGESIZE为64KB。265.3 关闭CPU中断的服务irqbalance openGauss学习笔记-265 openGauss性能调优-TPCC性能调优测试指导-操作系统配置 本…

OpenCV基本图像处理操作(八)——光流估计

光流估计 光流估计是一种用于检测图像序列中像素点运动的技术。它基于这样的假设&#xff1a;在连续的视频帧之间&#xff0c;一个物体的移动会导致像素强度的连续性变化。通过分析这些变化&#xff0c;光流方法可以估计每个像素点的运动速度和方向。 光流估计通常用于多种应…

idea 将项目上传到gitee远程仓库具体操作

目录标题 一、新建仓库二、初始化项目三、addcommit四、配置远程仓库五、拉取远程仓库内容六、push代码到仓库 一、新建仓库 新建仓库教程 注意&#xff1a;远程仓库的初始文件不要与本地存在名字一样的文件&#xff0c;不然拉取会因为冲突而失败。可以把远程一样的初始文件删…

Labview2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 LabVIEW是一种由美国国家仪器&#xff08;NI&#xff09;公司开发的程序开发环境&#xff0c;它显著区别于其他计算机语言&#xff0c;如C和BASIC。传统的计算机语言是基于文本的语言来产生代码&#xff0c;而LabVIEW则采用图形化…

HEF4046BT功能参数及避免使用的场景、应用前置放大器

制造商:NXP 产品种类:锁相环 PLL 类型:PLL 电路数量:1 电源电压 最大:15 V 电源电压 最小:3 V 最大工作温度: 85 C 安装风格:SMD/SMT 封装:SO-16 封装:Bulk 商标:NXP Semiconductors 最小工作温度:- 40 C 工作电源电压:3.3 V, 5 V, 9 V, 12 V HEF4046BT 是一种 CMO…

LINUX中使用cron定时任务被隐藏,咋回事?

一、问题现象 线上服务器运行过程中&#xff0c;进程有莫名进程被启动&#xff0c;怀疑是有定时任务自动启动&#xff0c;当你用常规方法去查看&#xff0c;比如使用crontab去查看定时器任务&#xff0c;提示no crontab for root 或者使用cat到/var/spool/cron目录下去查看定时…

Linux编辑器-vim的使用

vim的基本概念 vim的三种模式(其实有好多模式&#xff0c;目前掌握这3种即可),分别是命令模式&#xff08;command mode&#xff09;、插 入模式&#xff08;Insert mode&#xff09;和底行模式&#xff08;last line mode&#xff09;&#xff0c;各模式的功能区分如下&#…

027——从GUI->Client->Server->driver实现对SR501的控制

目录 1、修改显示界面 2、 添加对SR501显示的处理和tcp消息的处理 3、 在服务器程序中添加对SR501的处理 4、 编写驱动句柄 5、 修改底层驱动 1、修改显示界面 有个奇怪的问题这里的注释如果用 就会报错不知道为啥&#xff0c;只能用#来注释 我把显示这里需要显示的器件的…

nginx部署上线

1. windows配置nginx 打包命令 npm run build:prod 1. 安装 nginx mac windows 2. mac / windows 环境下ngnix部署启动项目 2. nginx 解决 history 的 404 问题 3. nginx配置代理解决生产环境跨域问题

Docker构建Golang项目常见问题

Docker构建Golang项目常见问题 1 dockerfile报错&#xff1a;failed to read expected number of bytes: unexpected EOF2 go mod tidy: go.mod file indicates go 1.21, but maximum supported version is 1.17 1 dockerfile报错&#xff1a;failed to read expected number o…

rhce.定时任务和延迟任务项目

一 . 在系统中设定延迟任务要求如下&#xff1a; 在系统中建立 easylee 用户&#xff0c;设定其密码为 easylee 延迟任务由 root 用户建立 要求在 5 小时后备份系统中的用户信息文件到/backup中 确保延迟任务是使用非交互模式建立 确保系统中只有 root 用户和easylee用户可以…

minio如何配置防盗链

MinIO 是一个开源的对象存储服务器&#xff0c;用于存储大量的数据&#xff0c;同时提供了丰富的功能和 API。配置防盗链可以帮助你控制谁可以访问存储在 MinIO 上的对象。以下是在 MinIO 中配置防盗链的一般步骤&#xff1a; 编辑 config.json 文件&#xff1a; 找到 MinIO 服…

网工交换技术基础——VLAN原理

1、VLAN的概念&#xff1a; VLAN(Virtual LAN)&#xff0c;翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络&#xff0c;也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域。 2、VLAN的主要作用&#xf…

『Django』创建app(应用程序)

theme: smartblue 本文简介 点赞 关注 收藏 学会了 在《『Django』环境搭建》中介绍了如何搭建 Django 环境&#xff0c;并且创建了一个 Django 项目。 在刚接触 Django 时有2个非常基础的功能是需要了解的&#xff0c;一个是“app”(应用程序)&#xff0c;另一个是 url(路由…

35. UE5 RPG制作火球术技能

接下来&#xff0c;我们将制作技能了&#xff0c;总算迈进了一大步。首先回顾一下之前是如何实现技能触发的&#xff0c;然后再进入正题。 如果想实现我之前的触发方式的&#xff0c;请看此栏目的31-33篇文章&#xff0c;讲解了实现逻辑&#xff0c;这里总结一下&#xff1a; …

【云计算】云数据中心网络(六):私网连接

云数据中心网络&#xff08;六&#xff09;&#xff1a;私网连接 1.什么是私网连接2.私网连接的组成3.私网连接的优势4.私网连接的主要应用场景 前面讲到 VPC 网络具有隔离性&#xff0c;VPC 之间无法通信。当一个 VPC 中的终端需要访问部署在另一个 VPC 中的服务时&#xff0c…

【C++题解】1345. 玫瑰花圃

问题&#xff1a;1345. 玫瑰花圃 类型&#xff1a;基本运算、小数运算 题目描述&#xff1a; 有一块nn&#xff08;n≥5&#xff0c;且 n 是奇数&#xff09;的红玫瑰花圃&#xff0c;由 nn 个小正方形花圃组成&#xff0c;现要求在花圃中最中间的一行、最中间的一列以及 4 个…

如何学习VBA_3.2.19:利用Shell函数运行可执行程序

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…

Python学习教程(Python学习路线+Python学习视频):Python数据结构

数据结构引言&#xff1a; 数据结构是组织数据的方式&#xff0c;以便能够更好的存储和获取数据。数据结构定义数据之间的关系和对这些数据的操作方式。数据结构屏蔽了数据存储和操作的细节&#xff0c;让程序员能更好的处理业务逻辑&#xff0c;同时拥有快速的数据存储和获取方…