大家好,欢迎来到无限大的频道
今天给大家带来的是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)是一种数据类型,它允许在同一内存位置储存不同的数据类型。共用体的大小是其最大成员的大小,这使它非常节省内存。共用体的一个主要作用是实现内存的共享,提供了一种灵活的数据管理方式,尤其在需要处理不同类型数据时非常有用。
代码解释:
- 共用体定义:我们定义了一个
PersonInfo
的共用体,它包含两个结构体:一个用于学生(带有班级信息),另一个用于老师(带有职位信息)。 - 枚举类型:
PersonType
枚举类型帮助我们在程序中清晰地表示是学生还是老师。 - 输入身份信息:程序首先询问用户的身份(学生或老师)。根据输入,程序会提示用户输入班级或职位,并相应地存储在共用体中。
- 输出信息:根据输入的身份,输出班级或职位的信息。
共用体的作用:
- 内存共享:同一个内存地点用于储存不同数据,节省内存。
- 多态性:能够根据需求存储多种类型数据,使程序更加灵活。
下面是更新拓展后的代码,它允许用户持续输入学生或老师的信息,并在每次输入时要求输入姓名。用户可以选择打印所有存储的内容,并且提供了退出程序的选项。
#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;
}
代码解释:
- 循环输入:使用
while (1)
永远循环,直到用户输入q
退出。 - 记录存储:使用数组
records
来存储每次输入的学生和老师信息,同时使用types
数组来记录每条记录的类型(学生或老师)。 - 姓名输入:在输入学生或老师信息时,增加了姓名字段的输入。
- 打印选择:在每次输入后,询问用户是否要打印所有存储的记录。
- 限制记录数量:设置了最大记录数量
MAX_RECORDS
,防止在内存中存储过多记录。
这种结构使得程序更加灵活且用户友好,允许多个输入和查询,同时保持存储的信息清晰地组织。
(当然你可以选择继续优化)