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,防止在内存中存储过多记录。

这种结构使得程序更加灵活且用户友好,允许多个输入和查询,同时保持存储的信息清晰地组织。

(当然你可以选择继续优化)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值