当前位置: 首页 > news >正文

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.lryc.cn/news/340996.html

相关文章:

  • AWS Key disabler:AWS IAM用户访问密钥安全保护工具
  • 【第1节】书生·浦语大模型全链路开源开放体系
  • 代码随想录-链表 | 707设计链表
  • AIGC算法1:Layer normalization
  • 【C语言】——字符串函数的使用与模拟实现(下)
  • mac安装nvm详细教程
  • 上线流程及操作
  • MobX入门指南:快速上手状态管理库
  • 技术洞察:Selenium WebDriver中Chrome, Edge, 和IE配置的关键区别
  • 使用自定义OCR提升UIE-X检测效果:结合PaddleOCR和UIE模型进行文档信息提取
  • 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
  • .net反射(Reflection)
  • P1278 单词游戏 简单搜索+玄学优化
  • 软考 - 系统架构设计师 - 数据架构真题
  • Ubuntu22.04下opencv4.9.0环境的搭建
  • Flask如何在后端实时处理视频帧在前端展示
  • 04-15 周一 GitHub仓库CI服务器actions-runner和workflow yaml配置文档解析
  • 论文笔记:SmartPlay : A Benchmark for LLMs as Intelligent Agents
  • 搜维尔科技:【工业仿真】煤矿安全知识基础学习VR系统
  • 线程和进程的区别(面试)
  • 抓取电商产品数据的方法|电商平台商品详情数据|批量上架|商品搬家|电商封装API数据采集接口更高效安全的数据采集
  • 关联规则Apriori算法
  • 书生·浦语大模型全链路开源体系-第4课
  • HTML优化SEO
  • RabbitMQ-交换机
  • mapreduce中的MapTask工作机制(Hadoop)
  • 景区文旅剧本杀小程序亲子公园寻宝闯关系统开发搭建
  • 性能优化---webpack优化
  • YOLOv9改进策略 | 损失函数篇 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数
  • 贪心算法-跳跃游戏