c语言200例 066

devtools/2024/9/29 15:30:06/

大家好,欢迎来到无限大的频道

今天给大家带来的是c语言200例。

要求:
根据输入的职业表示,区分是老师还是学生,然后根据输入的信息,将对应的信息输出,如果是学生,则输出班级,如果是老师则输出职位。其中“s”表示学生,“t”表示老师

#include <stdio.h>
#include <string.h>// 定义共用体,用于存储学生或老师的信息
typedef union {struct {char class[50];  // 学生的班级} student;struct {char title[50];  // 老师的职位} teacher;
} PersonInfo;// 定义枚举类型,以更好地表示身份
typedef enum {STUDENT,TEACHER
} PersonType;int main() {PersonInfo person;PersonType type;char input[10];// 用户输入身份类型printf("请输入身份类型(s表示学生,t表示老师):");scanf("%s", input);// 判断身份并输入相应信息if (strcmp(input, "s") == 0) {type = STUDENT;printf("请输入班级:");scanf("%s", person.student.class);printf("学生班级: %s\n", person.student.class);} else if (strcmp(input, "t") == 0) {type = TEACHER;printf("请输入职位:");scanf("%s", person.teacher.title);printf("老师职务: %s\n", person.teacher.title);} else {printf("输入错误,请输入's'或't'.\n");}return 0;
}

在这里插入图片描述

在 C 语言中,共用体(Union)是一种数据类型,它允许在同一内存位置储存不同的数据类型。共用体的大小是其最大成员的大小,这使它非常节省内存。共用体的一个主要作用是实现内存的共享,提供了一种灵活的数据管理方式,尤其在需要处理不同类型数据时非常有用。

代码解释:

  1. 共用体定义:我们定义了一个 PersonInfo 的共用体,它包含两个结构体:一个用于学生(带有班级信息),另一个用于老师(带有职位信息)。
  2. 枚举类型PersonType 枚举类型帮助我们在程序中清晰地表示是学生还是老师。
  3. 输入身份信息:程序首先询问用户的身份(学生或老师)。根据输入,程序会提示用户输入班级或职位,并相应地存储在共用体中。
  4. 输出信息:根据输入的身份,输出班级或职位的信息。

共用体的作用:

  • 内存共享:同一个内存地点用于储存不同数据,节省内存。
  • 多态性:能够根据需求存储多种类型数据,使程序更加灵活。

下面是更新拓展后的代码,它允许用户持续输入学生或老师的信息,并在每次输入时要求输入姓名。用户可以选择打印所有存储的内容,并且提供了退出程序的选项。

#include <stdio.h>
#include <string.h>#define MAX_RECORDS 100// 定义共用体,用于存储学生或老师的信息
typedef union {struct {char name[50];  // 学生的姓名char class[50]; // 学生的班级} student;struct {char name[50];  // 老师的姓名char title[50]; // 老师的职位} teacher;
} PersonInfo;// 定义枚举类型,以更好地表示身份
typedef enum {STUDENT,TEACHER
} PersonType;int main() {PersonInfo records[MAX_RECORDS];PersonType types[MAX_RECORDS];int count = 0;char input[10];while (1) {// 用户输入身份类型printf("请输入身份类型(s表示学生,t表示老师,q表示退出):");scanf("%s", input);if (strcmp(input, "q") == 0) {break; // 退出循环}if (count >= MAX_RECORDS) {printf("已达到记录上限,无法输入更多信息。\n");continue;}if (strcmp(input, "s") == 0) {types[count] = STUDENT;printf("请输入姓名:");scanf("%s", records[count].student.name);printf("请输入班级:");scanf("%s", records[count].student.class);count++;} else if (strcmp(input, "t") == 0) {types[count] = TEACHER;printf("请输入姓名:");scanf("%s", records[count].teacher.name);printf("请输入职位:");scanf("%s", records[count].teacher.title);count++;} else {printf("输入错误,请输入's'、't'或'q'。\n");continue;}// 选择打印所有存储的内容char printChoice[10];printf("是否要打印所有记录? (yes/no): ");scanf("%s", printChoice);if (strcmp(printChoice, "yes") == 0) {for (int i = 0; i < count; i++) {if (types[i] == STUDENT) {printf("学生姓名: %s, 班级: %s\n", records[i].student.name, records[i].student.class);} else if (types[i] == TEACHER) {printf("老师姓名: %s, 职位: %s\n", records[i].teacher.name, records[i].teacher.title);}}}}return 0;
}

在这里插入图片描述

代码解释:

  1. 循环输入:使用 while (1) 永远循环,直到用户输入 q 退出。
  2. 记录存储:使用数组 records 来存储每次输入的学生和老师信息,同时使用 types 数组来记录每条记录的类型(学生或老师)。
  3. 姓名输入:在输入学生或老师信息时,增加了姓名字段的输入。
  4. 打印选择:在每次输入后,询问用户是否要打印所有存储的记录。
  5. 限制记录数量:设置了最大记录数量 MAX_RECORDS,防止在内存中存储过多记录。

这种结构使得程序更加灵活且用户友好,允许多个输入和查询,同时保持存储的信息清晰地组织。

(当然你可以选择继续优化)


http://www.ppmy.cn/devtools/118751.html

相关文章

SpringCloud-07 GateWay01 网关技术

Spring Cloud Gateway组件的核心是一系列的过滤器&#xff0c;通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway是加在整个微服务最前沿的防火墙和代理器&#xff0c;隐藏微服务结点IP端口信息&#xff0c;从而加强安全保护。Spring Clou…

open-resty 服务安装jwt插件

作者&#xff1a;程序那点事儿 日期&#xff1a;2023/11/16 22:07 lua-resty-jwt 插件 如果想使用Lua识别用户令牌&#xff0c;我们需要引入lua-resty-jwt模块&#xff0c;是用于 ngx_lua 和 LuaJIT 的 Lua 实现库&#xff0c;在该模块能实现Jwt令牌生成、Jwt令牌校验。 下载…

前端大模型入门:使用Transformers.js手搓纯网页版RAG(二)- qwen1.5-0.5B - 纯前端不调接口

书接上文&#xff0c;本文完了RAG的后半部分&#xff0c;在浏览器运行qwen1.5-0.5B实现了增强搜索全流程。但受限于浏览器和模型性能&#xff0c;仅适合于研究、离线和高隐私场景&#xff0c;但对前端小伙伴来说大模型也不是那么遥不可及了&#xff0c;附带全部代码&#xff0c…

Cesium笔记 canvas定制billboard

Cesium 中label时&#xff0c;想要设置text的背景图片时&#xff0c;label没有backgroundimage属性。 如果使用labelbillboard 的方式设置&#xff0c;会存在文本长短不一时&#xff0c;图片不能自适应等问题。 const showLabelFun (dataMcInfo, backgroundcolor) > {var…

基于Next.js和TailwindCss的TailwindCss

最近在研究 Next.js 和 TailwindCss &#xff0c;这两天没事的时候就搞了一个 c。 目前工具部署在 Vercel &#xff0c;欢迎各位体验&#xff08;能提出意见更好嘿嘿&#xff09; 体验地址&#xff1a; https://icon.999872.xyz/ 图片预览 &#x1f447;

IOS-IPA签名工具 request_post 任意文件读取复现

0x01 产品描述&#xff1a; 苹果手机中的IPA是指iOS应用程序&#xff08;iPhone应用程序&#xff09;的安装包文件&#xff0c;其文件扩展名为.ipa。IPA文件是经过编译的、已签名的应用程序文件&#xff0c;可以在iOS设备上安装和运行。通常&#xff0c;开发者通过Xcode等开发工…

alpine安装docker踩坑记

文章目录 前言错误场景正确操作最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;最近使用alpine操作系统上docker遇到了一些错误&#xff0c;尝试解决之后就准备输出一篇博客&#xff0c;帮助有需要的后人能够少踩坑&#xff0c;因为淋过雨所以想给别人撑伞 错误场景 我…

MATLAB编写的RSSI在三维空间上的定位程序,锚点数量无限制(可自定义),带中文注释

文章目录 程序说明功能概述环境设置结果可视化函数定义运行结果程序获取 程序说明 功能概述 该程序实现了在三维空间中通过接收信号强度指示&#xff08;RSSI&#xff09;进行定位的功能。利用多个锚节点的信号强度测量&#xff0c;估计未知点的位置。该程序适用于无线定位应…