c语言200例 066

news2024/11/17 1:36:07

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

今天给大家带来的是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.coloradmin.cn/o/2174689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xlsx库插件读取excel文件

input读取xlsx文件内容 效果代码 前端用input读取 .xlsx文件的内容 xlsx库参考连接 项目中我用的ant-design-vue&#xff0c;不过用input一样的大同小异 注意区分xlsx库和node-xlsx库的使用环境 效果 代码 <!--* Descripttion: * Author: 苍狼一啸八荒惊* Date: 2024-08-…

英文翻译中文怎么做?试试这四款翻译工具!

日常工作中&#xff0c;我时常需要处理各种学术资料&#xff0c;其中不乏英文文献。在这个信息爆炸的时代&#xff0c;翻译工具成为了我们不可或缺的好帮手。今天&#xff0c;我想和大家分享几款我常用的翻译工具&#xff0c;它们在英文翻译中文方面的表现&#xff0c;真的让我…

学习鸿蒙Harmong基础(二)

1.类声明和使用 class Perpon { name : string "小赵"; age : number 24; isShow :boolean true; // 构造函数 constructor(name:string,age:number,isShow:boolean){ this.name name; this.age age; this.isShow isShow } puperyInfo(){ if (this.isShow) { …

Chainlit集成LlamaIndex实现知识库高级检索(子问题查询引擎)

检索原理 llama_index 的 SubQuestionQueryEngine 是一个用于处理复杂查询的机制&#xff0c;它的主要目的是将复杂的查询问题分解成多个较小的、更容易管理和处理的子问题。这种技术有助于提高查询效率和准确性&#xff0c;尤其是在处理大量文档或者需要多步骤推理的情况下。…

2024年【金属非金属矿山(露天矿山)安全管理人员】最新解析及金属非金属矿山(露天矿山)安全管理人员考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 金属非金属矿山&#xff08;露天矿山&#xff09;安全管理人员最新解析参考答案及金属非金属矿山&#xff08;露天矿山&#xff09;安全管理人员考试试题解析是安全生产模拟考试一点通题库老师及金属非金属矿山&#…

安装 Nacos 启动报错 java.lang.IllegalArgumentException: db.num is null

java.io.IOException: java.lang.IllegalArgumentException: db.num is nullat com.alibaba.nacos.config.server.service.datasource.ExternalDataSourceServiceImpl.reload(ExternalDataSourceServiceImpl.java:130)解决办法&#xff1a; 编辑 startup.cmd 文件 找到 set MO…

计算机毕业设计 基于Python的热门微博数据可视化分析系统的设计与实现 Python+Django+Vue 可视化大屏 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

海外盲盒APP系统:盲盒出海热潮下的选择

近年来&#xff0c;盲盒市场展现出了强劲的发展态势&#xff0c;不仅在国内持续上演“盲盒热”&#xff0c;在海外市场中更是“一盒难求”&#xff01;在盲盒出海的浪潮下&#xff0c;盲盒在国际市场中迅速火爆&#xff0c;一时席卷了全球市场。 海外盲盒系统是企业拓展海外市…

c++模拟真人鼠标轨迹算法

一.鼠标轨迹算法简介 鼠标轨迹底层实现采用 C / C语言&#xff0c;利用其高性能和系统级访问能力&#xff0c;开发出高效的鼠标轨迹模拟算法。通过将算法封装为 DLL&#xff08;动态链接库&#xff09;&#xff0c;可以方便地在不同的编程环境中调用&#xff0c;实现跨语言的兼…

没有建筑工程资质,怎么去投标?

在建筑工程领域&#xff0c;没有资质的企业想要参与投标&#xff0c;可以考虑以下几种方式&#xff1a; 1. 资质借用&#xff1a;可以与具有相应资质的企业合作&#xff0c;通过资质借用的方式参与投标。但这种做法存在法律风险&#xff0c;因为《中华人民共和国招标投标法》明…

kubernetes配置资源管理

目录 一、Secret1.1 Secret 四种类型1.2 Secret 使用条件 二、Secret 使用方式2.1 基于Opaque创建 Secret2.2 内容用 base64 编码&#xff0c;创建Secret2.3 将 Secret 挂载到 Volume 中&#xff0c;以 Volume 的形式挂载到 Pod 的某个目录下2.4 将 Secret 导出到环境变量中2.5…

【Python】Pythonic Data Structures and Algorithms:深入浅出数据结构与算法的 Python 实现

Pythonic Data Structures and Algorithms 是一个开源项目&#xff0c;汇集了各种经典数据结构和算法的 Python 实现。该项目旨在为开发者提供丰富的学习资源&#xff0c;帮助他们通过 Python 代码理解和掌握数据结构与算法的核心原理和应用。项目中的算法涵盖了排序、搜索、图…

南平自闭症寄宿制学校:让孩子自信绽放

在繁华与喧嚣交织的都市之中&#xff0c;有一片静谧而充满希望的土地——广州星贝育园自闭症儿童寄宿制学校&#xff0c;这里不仅是知识的殿堂&#xff0c;更是自闭症儿童心灵成长的温馨家园。星贝育园&#xff0c;以其独特的教育理念与细致入微的关怀&#xff0c;为这些特殊的…

初始爬虫9

1.元素定位后的操作 “find_element“仅仅能够获取元素&#xff0c;不能够直接获取其中的数据&#xff0c;如果需要获取数据需要使用以下方法”。下面列出了两个方法&#xff1a; 获取文本 element.text 通过定位获取的标签对象的 text 属性&#xff0c;获取文本内容 获取属性…

opencv实战项目二十九:GrabCut分割人像

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、GrabCut介绍&#xff1a;二、opencv实现&#xff1a;三、效果&#xff1a; 前言 在数字图像处理领域&#xff0c;人像分割是一项极具挑战性的任务&#xf…

二维数组的使用

本章我将用自己的语言给大家翻译二维数组的使用&#xff0c;要是因为我阐述的不清晰&#xff0c;大家不懂的的可以直接在评论里问。 1.下标 二维数组的下标和一维数组没有多大的区别&#xff0c;唯一的区别就是&#xff0c;一维数组只有列&#xff0c;而二维数组还有行 一维数…

C高级(Day22)

一、学习内容 shell指令 文件相关的指令 重定向 > >> echo :打印字符串 cat: 在终端打印文件的内容 链接文件 硬链接文件&#xff1a;文件的inode号是一样的。 查看文件inode号&#xff1a; ls -i 格式&#xff1a;ln 被链接的文件 创建硬链接文件 1 硬链接的文件…

maven-web项目配置打包插件

maven-web项目配置打包 配置maven 打包插件 <!-- 打包 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.4</version><!-- <configuration><webRes…

c#使用winscp库实现FTP/SFTP/SCP的获取列表、上传和下载功能

网上写c#调用winscp实现的资料很少,且写的不够详细。本人查了下winscp的libraries说明,写了个小工具,供大家参考。 winscp的接口说明地址如下: WinSCP .NET Assembly and COM Library :: WinSCP 一、先展示一下小工具的界面 1、支持SFTP/FTP/SCP 2、支持文件夹、文件的…

UE4_Niagara基础实例—4、静态网格体表面生成粒子

效果图&#xff1a; 分析&#xff1a;在物体面上生成粒子&#xff0c;改变粒子的不透明度&#xff0c;让粒子收到力&#xff0c;并添加紊乱&#xff0c;类似于水蒸气。 操作步骤&#xff1a; 1、创建个niagara 系统&#xff0c;使用模版 simple sprite burst。简单调节参数。…