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

c语言200例 067

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

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

题目要求:

设计一个共用体类型,使其成员包含多种数据类型,根据不同的数据类型,输出不同的结果

要设计一个共用体(union)类型,以便其成员可以包含多种数据类型,并根据不同的数据类型输出不同的结果,可以按照以下步骤进行:

  1. 定义一个共用体,包含所需的数据类型。
  2. 使用一个枚举(enum)来标识正在使用的成员类型。
  3. 创建一个函数根据共用体中的数据类型进行不同的输出。

下面是相应的 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;
}

在这里插入图片描述

代码分析:

  1. DataType枚举: 用于标识共用体当前存储的数据类型。
  2. DataValue共用体: 可以存储一个整数、一个浮点数或一个字符。
  3. Data结构体: 结合了枚举和共用体,使得你可以轻松地知道当前存储的数据类型,并访问对应的值。
  4. printData函数: 根据type的值,判断应该输出哪个值,并使用不同的格式进行打印。

以下是对之前代码的进一步扩展。我们将添加用户输入功能,自动识别输入值的类型,允许用户选择是否继续或终止程序,并扩展输出的信息。

扩展设计要点:

  1. 自动识别输入值类型: 使用字符串输入并根据用户提供的值判断其类型。
  2. 用户控制程序流: 让用户选择继续或终止程序。
  3. 扩展功能: 为每种数据类型添加更多的操作和输出。

下面是扩展后的代码示例:

#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;}
}

在这里插入图片描述

代码扩展分析:

  1. 用户输入和类型识别:

    • 使用 fgets 获取用户输入,并去除换行符。
    • 使用 identifyType 函数判断输入的类型。该函数尝试将输入解析为整数、浮点数及字符,返回相应的类型。
  2. 动态程序控制:

    • 添加一个循环,询问用户是否继续输入,用户可以选择 ‘y’ 或 ‘n’ 来决定。
  3. 增强的输出功能:

    • 输出时根据数据类型不同,提供不同的格式。
    • 接受并处理字符类型的输入,限制为单个可打印字符。

这个设计提高了程序的灵活性和用户交互性,使得用户能够更方便地输入多种类型的数据并查看结果。

相关文章:

c语言200例 067

大家好&#xff0c;欢迎来到无限大的频道 今天给大家带来的是c语言200例 题目要求&#xff1a; 设计一个共用体类型&#xff0c;使其成员包含多种数据类型&#xff0c;根据不同的数据类型&#xff0c;输出不同的结果 要设计一个共用体&#xff08;union&#xff09;类型&…...

RabbitMQ的高级特性-死信队列

死信(dead message) 简单理解就是因为种种原因, ⽆法被消费的信息, 就是死信. 有死信, ⾃然就有死信队列. 当消息在⼀个队列中变成死信之后&#xff0c;它能被重新被发送到另⼀个交换器 中&#xff0c;这个交换器就是DLX( Dead Letter Exchange ), 绑定DLX的队列, 就称为死信队…...

Python 复制PDF中的页面

操作PDF文档时&#xff0c;复制其中的指定页面可以帮助我们从PDF文件中提取特定信息&#xff0c;如文本、图表或数据等&#xff0c;以便在其他文档中使用。复制PDF页面也可以实现在不同文件中提取页面&#xff0c;以创建一个新的综合文档。 本文将介绍如何使用Python 在同一文档…...

Sql Developer日期显示格式设置

默认时间格式显示 设置时间格式&#xff1a;工具->首选项->数据库->NLS->日期格式: DD-MON-RR 修改为: YYYY-MM-DD HH24:MI:SS 设置完格式显示&#xff1a;...

IP地址与智能家居能够碰撞出什么样的火花呢?

感应灯、远程遥控空调&#xff0c;自动感应窗帘——智能家居已经在正逐步走入我们的生活&#xff0c;为我们带来前所未有的便捷与舒适体验。而在这一进程中&#xff0c;IP地址又能够与智能家居碰撞出什么样的火花呢&#xff1f; 一、IP地址&#xff1a;智能家居的连接基石 智…...

人工智能技术在电磁场与微波技术专业的应用

在人工智能与计算电磁学的融合背景下&#xff0c;电磁学的研究和应用正在经历一场革命。计算电磁 学是研究电磁场和电磁波在不同介质中的传播、散射和辐射等问题的学科&#xff0c;它在通信、雷达、无 线能量传输等领域具有广泛的应用。随着人工智能技术的发展&#xff0c;这一…...

The First项目报告:探索Yield Guild Games运行机制与发展潜力

在探索数字娱乐与金融融合的全新疆域中&#xff0c;GameFi&#xff08;游戏化金融&#xff09;以其独特的魅力引领了一场前所未有的变革。这一创新概念&#xff0c;最初由MixMarvel的CSO Mary Ma在2019年底乌镇大会的远见卓识中首次提出&#xff0c;它将去中心化金融&#xff0…...

完成UI界面的绘制

绘制UI 接上文&#xff0c;在Order90Canvas下创建Image子物体&#xff0c;图片资源ui_fish_lv1&#xff0c;设置锚点&#xff08;CountdownPanelImg同理&#xff09;&#xff0c;命名为LvPanelImg,创建Text子物体&#xff0c;边框宽高各50&#xff0c; &#xff0c;重名为LvT…...

iot网关是什么?iot网关在工业领域的应用-天拓四方

一、IoT网关的定义 IoT网关&#xff0c;即物联网网关&#xff0c;是物联网&#xff08;IoT&#xff09;系统中的重要组成部分。它主要实现感知网络与通信网络&#xff0c;以及不同类型感知网络之间的协议转换&#xff0c;既能够支持广域互联&#xff0c;也能满足局域互联的需求…...

从碎片到整合:EasyCVR平台如何重塑城市感知系统的视频数据生态

随着城市化进程的加速&#xff0c;城市感知系统作为智慧城市的重要组成部分&#xff0c;正逐步成为提升城市管理效率、保障公共安全、优化资源配置的关键手段。EasyCVR视频汇聚融合平台&#xff0c;凭借其强大的数据整合、智能分析与远程监控能力&#xff0c;在城市感知系统中扮…...

java socket bio 改造为 netty nio

公司早些时候接入一款健康监测设备&#xff0c;由于业务原因近日把端口暴露在公网后&#xff0c;每当被恶意连接时系统会创建大量线程&#xff0c;在排查问题是发现是使用了厂家提供的服务端demo代码&#xff0c;在代码中使用的是java 原生socket&#xff0c;在发现连接后使用独…...

进程、线程、协程详解:并发编程的三大武器

在现代计算机科学中,并发编程是一个核心概念,而进程、线程和协程是实现并发的三种主要方式。本文将深入探讨这三种概念,分析它们的特点、优缺点,以及适用场景。 1. 进程 (Process) 1.1 定义 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的…...

探索5 大 Node.js 功能

目录 单线程 Node.js 工作线程【Worker Threads】 Node.js 进程 进程缺点 工作线程 注意 集群进程模块【Cluster Process Module】 内部发生了什么&#xff1f; 为什么要使用集群 注意&#xff1a; 应用场景&#xff1a; 内置 HTTP/2 支持 这个 HTTP/2 是什么&…...

EZUIKit.js萤石云vue项目使用

EZUIKit.js 是萤石云&#xff08;Ezviz&#xff09;提供的一款用于Web端的视频播放和控制的JavaScript库。它允许开发者在网页上轻松集成视频监控、对讲、录像回放等功能&#xff0c;适用于安防监控、智能家居等场景。通过EZUIKit.js&#xff0c;你可以方便地访问萤石云平台上的…...

【Linux】磁盘分区挂载网络配置进程【更详细,带实操】

Linux全套讲解系列&#xff0c;参考视频-B站韩顺平&#xff0c;本文的讲解更为详细 目录 一、磁盘分区挂载 1、磁盘分区机制 2、增加磁盘应用实例 3、磁盘情况查询 4、磁盘实用指令 二、网络配置 1、NAT网络原理图 2、网络配置指令 3、网络配置实例 4、主机名和host…...

Java 为什么使用 UTF-16 而不是更节省内存的 UTF-8?

Java 选择 UTF-16 编码而不是更节省内存的 UTF-8 这一决定&#xff0c;涉及多个层面的设计权衡&#xff0c;包括历史原因、虚拟机&#xff08;JVM&#xff09;实现的复杂度、性能和字符处理的一致性。要理解这个问题&#xff0c;我们需要从 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...

夹耳开放式耳机好用吗?一篇文章告诉你答案,附上挑选避坑小知识

夹耳开放式耳机作为音频领域的新兴产品&#xff0c;正逐渐走入大众视野。其独特的设计和功能引发了广泛关注与讨论。究竟夹耳开放式耳机好用吗&#xff1f;在这篇文章中&#xff0c;我们将从专业角度深入剖析他的各个方面。同时&#xff0c;还会为你提供详细的挑选避坑小知识&a…...

WebSocket 2024/9/30

WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c;并进行双向数据传输。 与HTTP协议的区别 实现...

大数据开发--1.1大数据概论

目录 一.大数据的概念 什么是大数据&#xff1f; 二. 大数据的特点 三. 大数据应用场景 四. 大数据分析业务步骤 大数据分析的业务流程&#xff1a; 五.大数据职业规划 职业方向 岗位技术要求 六. 大数据学习路线 一.大数据的概念 什么是大数据&#xff1f; 数据 世界…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

验证redis数据结构

一、功能验证 1.验证redis的数据结构&#xff08;如字符串、列表、哈希、集合、有序集合等&#xff09;是否按照预期工作。 2、常见的数据结构验证方法&#xff1a; ①字符串&#xff08;string&#xff09; 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...

Pandas 可视化集成:数据科学家的高效绘图指南

为什么选择 Pandas 进行数据可视化&#xff1f; 在数据科学和分析领域&#xff0c;可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具&#xff0c;如 Matplotlib、Seaborn、Plotly 等&#xff0c;但 Pandas 内置的可视化功能因其与数据结…...