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

c语言200例 066

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

今天给大家带来的是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.kler.cn/a/323471.html

相关文章:

  • 接上篇-使用 element-plus 优化UI界面
  • C#界面设计
  • CSS基础知识01
  • CSS Module:告别类名冲突,拥抱模块化样式(5)
  • 【SpringBoot】20 同步调用、异步调用、异步回调
  • Javascript高级—常见算法
  • Spring Boot实战:构建在线商城系统
  • PyQt5中关于QLineEdit的空输入报错的简单处理
  • 华为云发布全栈可观测平台AOM,以AI赋能应用运维可观测
  • Apache Cordova/PhoneGap
  • ConstructorParameters
  • 基于elasticsearch存储船舶历史轨迹
  • 基于SpringBoot+Vue的大学生勤工助学兼职管理系统
  • 2024最新【PyCharm】史上最全PyCharm安装教程,图文教程(超详细)
  • harmonyOS ArkTS最新跳转Navigation
  • 解决编译问题:undefined reference to `__aeabi_uidivmod‘
  • 20240924 行列式为1的矩阵不一定是正交矩阵
  • 昇思MindSpore进阶教程--数据处理管道支持Python对象
  • 基于Hive和Hadoop的用电量分析系统
  • 三节课发布首张AIGC学习地图,全员学习AI真的必要吗?
  • Java Web —— 第十天(SpringBoot原理)
  • ML 系列:机器学习和深度学习的深层次总结(06)— 提升数据质量
  • 数通。。。
  • uniapp js向json中增加另一个json的全部数据,并获取json长度
  • 【分布式微服务云原生】Dockerfile命令详解
  • 一站式家装服务管理系统