当前位置: 首页 > 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. 增强的输出功能:

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

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

http://www.lryc.cn/news/449909.html

相关文章:

  • RabbitMQ的高级特性-死信队列
  • Python 复制PDF中的页面
  • Sql Developer日期显示格式设置
  • IP地址与智能家居能够碰撞出什么样的火花呢?
  • 人工智能技术在电磁场与微波技术专业的应用
  • The First项目报告:探索Yield Guild Games运行机制与发展潜力
  • 完成UI界面的绘制
  • iot网关是什么?iot网关在工业领域的应用-天拓四方
  • 从碎片到整合:EasyCVR平台如何重塑城市感知系统的视频数据生态
  • java socket bio 改造为 netty nio
  • 进程、线程、协程详解:并发编程的三大武器
  • 探索5 大 Node.js 功能
  • EZUIKit.js萤石云vue项目使用
  • 【Linux】磁盘分区挂载网络配置进程【更详细,带实操】
  • Java 为什么使用 UTF-16 而不是更节省内存的 UTF-8?
  • 损失函数篇 | YOLOv10 引入 Inner-IoU 基于辅助边框的IoU损失
  • 夹耳开放式耳机好用吗?一篇文章告诉你答案,附上挑选避坑小知识
  • WebSocket 2024/9/30
  • 大数据开发--1.1大数据概论
  • Java | Leetcode Java题解之第438题找到字符串中所有字母异位词
  • springboot整合MybatisPlus+MySQL
  • 【MySQL】视图、用户和权限管理
  • Linux基础(五):linux文件种类与扩展名
  • C语言-c语言组成
  • 编程题 7-13 日K蜡烛图【PAT】
  • iOS开发工程师面试
  • 无人机避障—— 激光雷达定高北醒TF03-UART(二)
  • 在虚幻引擎中实现Camera Shake 相机抖动/震屏效果
  • SQL Server的文本和图像函数
  • PN8034非隔离12V300MA,SOP7/DIP7开关电源芯片