c语言200例 067
大家好,欢迎来到无限大的频道
今天给大家带来的是c语言200例
题目要求:
设计一个共用体类型,使其成员包含多种数据类型,根据不同的数据类型,输出不同的结果
要设计一个共用体(union)类型,以便其成员可以包含多种数据类型,并根据不同的数据类型输出不同的结果,可以按照以下步骤进行:
- 定义一个共用体,包含所需的数据类型。
- 使用一个枚举(enum)来标识正在使用的成员类型。
- 创建一个函数根据共用体中的数据类型进行不同的输出。
下面是相应的 C 语言代码示例:
#include <stdio.h>// 定义一个枚举,表示不同的数据类型
typedef enum {INT_TYPE,FLOAT_TYPE,CHAR_TYPE
} DataType;// 定义一个共用体,可包含多种数据类型
typedef union {int intValue;float floatValue;char charValue;
} DataValue;// 定义一个结构体,将共用体与数据类型一起使用
typedef struct {DataType type;DataValue value;
} Data;// 输出不同类型的数据
void printData(Data data) {switch (data.type) {case INT_TYPE:printf("Integer value: %d\n", data.value.intValue);break;case FLOAT_TYPE:printf("Float value: %.2f\n", data.value.floatValue);break;case CHAR_TYPE:printf("Character value: %c\n", data.value.charValue);break;default:printf("Unknown data type\n");break;}
}int main() {// 创建一个整数类型的数据Data data1;data1.type = INT_TYPE;data1.value.intValue = 10;// 创建一个浮点类型的数据Data data2;data2.type = FLOAT_TYPE;data2.value.floatValue = 5.75f;// 创建一个字符类型的数据Data data3;data3.type = CHAR_TYPE;data3.value.charValue = 'A';// 输出数据printData(data1);printData(data2);printData(data3);return 0;
}

代码分析:
- DataType枚举: 用于标识共用体当前存储的数据类型。
- DataValue共用体: 可以存储一个整数、一个浮点数或一个字符。
- Data结构体: 结合了枚举和共用体,使得你可以轻松地知道当前存储的数据类型,并访问对应的值。
- printData函数: 根据type的值,判断应该输出哪个值,并使用不同的格式进行打印。
以下是对之前代码的进一步扩展。我们将添加用户输入功能,自动识别输入值的类型,允许用户选择是否继续或终止程序,并扩展输出的信息。
扩展设计要点:
- 自动识别输入值类型: 使用字符串输入并根据用户提供的值判断其类型。
- 用户控制程序流: 让用户选择继续或终止程序。
- 扩展功能: 为每种数据类型添加更多的操作和输出。
下面是扩展后的代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>// 定义一个枚举,表示不同的数据类型
typedef enum {INT_TYPE,FLOAT_TYPE,CHAR_TYPE,UNKNOWN_TYPE
} DataType;// 定义一个共用体,可包含多种数据类型
typedef union {int intValue;float floatValue;char charValue;
} DataValue;// 定义一个结构体,将共用体与数据类型一起使用
typedef struct {DataType type;DataValue value;
} Data;// 函数声明
DataType identifyType(const char* input);
void printData(Data data);// 主函数
int main() {char input[100];int continueProgram = 1;while (continueProgram) {printf("请输入一个值(整数、浮点数或字符):");fgets(input, 100, stdin);// 去除换行符input[strcspn(input, "\n")] = '\0';// 识别输入值的类型DataType type = identifyType(input);Data data;data.type = type;// 根据类型进行相应的处理switch (type) {case INT_TYPE:data.value.intValue = atoi(input);break;case FLOAT_TYPE:data.value.floatValue = atof(input);break;case CHAR_TYPE:data.value.charValue = input[0]; // 取第一个字符break;default:printf("未知的数据类型,无法处理该输入。\n");continue; // 跳过本轮循环}// 输出数据printData(data);// 提示用户是否继续char choice;printf("您想继续输入吗?(y/n): ");scanf(" %c", &choice);getchar(); // 清除输入缓冲区中的换行符if (choice != 'y' && choice != 'Y') {continueProgram = 0; // 终止程序}}return 0;
}// 自动识别输入数据类型
DataType identifyType(const char* input) {// 检查是否为整数char* endPtr;strtol(input, &endPtr, 10);if (*endPtr == '\0') {return INT_TYPE;}// 检查是否为浮点数strtof(input, &endPtr);if (*endPtr == '\0') {return FLOAT_TYPE;}// 检查是否为单个字符if (strlen(input) == 1 && isprint(input[0])) {return CHAR_TYPE;}return UNKNOWN_TYPE;
}// 输出不同类型的数据
void printData(Data data) {switch (data.type) {case INT_TYPE:printf("您输入的整数值是: %d\n", data.value.intValue);break;case FLOAT_TYPE:printf("您输入的浮点值是: %.2f\n", data.value.floatValue);break;case CHAR_TYPE:printf("您输入的字符值是: %c\n", data.value.charValue);break;default:printf("未能识别的类型。\n");break;}
}

代码扩展分析:
-  用户输入和类型识别: - 使用 fgets获取用户输入,并去除换行符。
- 使用 identifyType函数判断输入的类型。该函数尝试将输入解析为整数、浮点数及字符,返回相应的类型。
 
- 使用 
-  动态程序控制: - 添加一个循环,询问用户是否继续输入,用户可以选择 ‘y’ 或 ‘n’ 来决定。
 
-  增强的输出功能: - 输出时根据数据类型不同,提供不同的格式。
- 接受并处理字符类型的输入,限制为单个可打印字符。
 
这个设计提高了程序的灵活性和用户交互性,使得用户能够更方便地输入多种类型的数据并查看结果。
相关文章:
 
c语言200例 067
大家好,欢迎来到无限大的频道 今天给大家带来的是c语言200例 题目要求: 设计一个共用体类型,使其成员包含多种数据类型,根据不同的数据类型,输出不同的结果 要设计一个共用体(union)类型&…...
 
RabbitMQ的高级特性-死信队列
死信(dead message) 简单理解就是因为种种原因, ⽆法被消费的信息, 就是死信. 有死信, ⾃然就有死信队列. 当消息在⼀个队列中变成死信之后,它能被重新被发送到另⼀个交换器 中,这个交换器就是DLX( Dead Letter Exchange ), 绑定DLX的队列, 就称为死信队…...
 
Python 复制PDF中的页面
操作PDF文档时,复制其中的指定页面可以帮助我们从PDF文件中提取特定信息,如文本、图表或数据等,以便在其他文档中使用。复制PDF页面也可以实现在不同文件中提取页面,以创建一个新的综合文档。 本文将介绍如何使用Python 在同一文档…...
 
Sql Developer日期显示格式设置
默认时间格式显示 设置时间格式:工具->首选项->数据库->NLS->日期格式: DD-MON-RR 修改为: YYYY-MM-DD HH24:MI:SS 设置完格式显示:...
 
IP地址与智能家居能够碰撞出什么样的火花呢?
感应灯、远程遥控空调,自动感应窗帘——智能家居已经在正逐步走入我们的生活,为我们带来前所未有的便捷与舒适体验。而在这一进程中,IP地址又能够与智能家居碰撞出什么样的火花呢? 一、IP地址:智能家居的连接基石 智…...
 
人工智能技术在电磁场与微波技术专业的应用
在人工智能与计算电磁学的融合背景下,电磁学的研究和应用正在经历一场革命。计算电磁 学是研究电磁场和电磁波在不同介质中的传播、散射和辐射等问题的学科,它在通信、雷达、无 线能量传输等领域具有广泛的应用。随着人工智能技术的发展,这一…...
 
The First项目报告:探索Yield Guild Games运行机制与发展潜力
在探索数字娱乐与金融融合的全新疆域中,GameFi(游戏化金融)以其独特的魅力引领了一场前所未有的变革。这一创新概念,最初由MixMarvel的CSO Mary Ma在2019年底乌镇大会的远见卓识中首次提出,它将去中心化金融࿰…...
 
完成UI界面的绘制
绘制UI 接上文,在Order90Canvas下创建Image子物体,图片资源ui_fish_lv1,设置锚点(CountdownPanelImg同理),命名为LvPanelImg,创建Text子物体,边框宽高各50, ,重名为LvT…...
 
iot网关是什么?iot网关在工业领域的应用-天拓四方
一、IoT网关的定义 IoT网关,即物联网网关,是物联网(IoT)系统中的重要组成部分。它主要实现感知网络与通信网络,以及不同类型感知网络之间的协议转换,既能够支持广域互联,也能满足局域互联的需求…...
 
从碎片到整合:EasyCVR平台如何重塑城市感知系统的视频数据生态
随着城市化进程的加速,城市感知系统作为智慧城市的重要组成部分,正逐步成为提升城市管理效率、保障公共安全、优化资源配置的关键手段。EasyCVR视频汇聚融合平台,凭借其强大的数据整合、智能分析与远程监控能力,在城市感知系统中扮…...
java socket bio 改造为 netty nio
公司早些时候接入一款健康监测设备,由于业务原因近日把端口暴露在公网后,每当被恶意连接时系统会创建大量线程,在排查问题是发现是使用了厂家提供的服务端demo代码,在代码中使用的是java 原生socket,在发现连接后使用独…...
进程、线程、协程详解:并发编程的三大武器
在现代计算机科学中,并发编程是一个核心概念,而进程、线程和协程是实现并发的三种主要方式。本文将深入探讨这三种概念,分析它们的特点、优缺点,以及适用场景。 1. 进程 (Process) 1.1 定义 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的…...
 
探索5 大 Node.js 功能
目录 单线程 Node.js 工作线程【Worker Threads】 Node.js 进程 进程缺点 工作线程 注意 集群进程模块【Cluster Process Module】 内部发生了什么? 为什么要使用集群 注意: 应用场景: 内置 HTTP/2 支持 这个 HTTP/2 是什么&…...
EZUIKit.js萤石云vue项目使用
EZUIKit.js 是萤石云(Ezviz)提供的一款用于Web端的视频播放和控制的JavaScript库。它允许开发者在网页上轻松集成视频监控、对讲、录像回放等功能,适用于安防监控、智能家居等场景。通过EZUIKit.js,你可以方便地访问萤石云平台上的…...
 
【Linux】磁盘分区挂载网络配置进程【更详细,带实操】
Linux全套讲解系列,参考视频-B站韩顺平,本文的讲解更为详细 目录 一、磁盘分区挂载 1、磁盘分区机制 2、增加磁盘应用实例 3、磁盘情况查询 4、磁盘实用指令 二、网络配置 1、NAT网络原理图 2、网络配置指令 3、网络配置实例 4、主机名和host…...
 
Java 为什么使用 UTF-16 而不是更节省内存的 UTF-8?
Java 选择 UTF-16 编码而不是更节省内存的 UTF-8 这一决定,涉及多个层面的设计权衡,包括历史原因、虚拟机(JVM)实现的复杂度、性能和字符处理的一致性。要理解这个问题,我们需要从 Java 语言的设计初衷、JVM 的工作机制…...
 
损失函数篇 | YOLOv10 引入 Inner-IoU 基于辅助边框的IoU损失
作者导读:Inter-IoU:基于辅助边框的IoU损失 论文地址:https://arxiv.org/abs/2311.02877 作者视频解读:https://www.bilibili.com 开源代码地址:https://github.com/malagoutou/Inner-IoU...
 
夹耳开放式耳机好用吗?一篇文章告诉你答案,附上挑选避坑小知识
夹耳开放式耳机作为音频领域的新兴产品,正逐渐走入大众视野。其独特的设计和功能引发了广泛关注与讨论。究竟夹耳开放式耳机好用吗?在这篇文章中,我们将从专业角度深入剖析他的各个方面。同时,还会为你提供详细的挑选避坑小知识&a…...
 
WebSocket 2024/9/30
WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。 与HTTP协议的区别 实现...
 
大数据开发--1.1大数据概论
目录 一.大数据的概念 什么是大数据? 二. 大数据的特点 三. 大数据应用场景 四. 大数据分析业务步骤 大数据分析的业务流程: 五.大数据职业规划 职业方向 岗位技术要求 六. 大数据学习路线 一.大数据的概念 什么是大数据? 数据 世界…...
 
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
 
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
 
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
 
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
 
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
 
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
 
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
 
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
