📅  最后修改于: 2023-12-03 15:13:47.435000             🧑  作者: Mango
在 C 语言中,结构体和联合体是用来存储不同类型数据的两种常见数据类型。结构体可以存储多个不同类型的数据,而联合体只能存储其中一个。
在问题7中,我们需要写一个程序,定义一个结构体和一个联合体,分别存储学生的姓名和学号。程序需要能够接收用户输入的学生信息并输出到屏幕上。
以下是一个示例程序:
#include <stdio.h>
#include <string.h>
// 定义结构体
struct Student {
char name[50];
int id;
};
// 定义联合体
union StudentUnion {
char name[50];
int id;
};
int main() {
// 定义结构体变量
struct Student s;
// 接收用户输入的学生姓名
printf("Enter student name: ");
fgets(s.name, sizeof(s.name), stdin);
// 删除末尾的换行符
s.name[strlen(s.name)-1] = '\0';
// 接收用户输入的学生学号
printf("Enter student ID: ");
scanf("%d", &s.id);
// 输出学生信息
printf("\nStudent information:\n");
printf("Name: %s\n", s.name);
printf("ID: %d\n", s.id);
// 定义联合体变量
union StudentUnion u;
// 接收用户输入的学生姓名
printf("\nEnter student name: ");
fgets(u.name, sizeof(u.name), stdin);
// 删除末尾的换行符
u.name[strlen(u.name)-1] = '\0';
// 接收用户输入的学生学号
printf("Enter student ID: ");
scanf("%d", &u.id);
// 输出学生信息
printf("\nStudent information:\n");
printf("Name: %s\n", u.name);
printf("ID: %d\n", u.id);
return 0;
}
在上面的程序中,我们首先定义了一个结构体 Student
和一个联合体 StudentUnion
,分别用来存储学生的姓名和学号。然后在 main
函数中,我们定义了 s
和 u
两个变量,分别是结构体和联合体类型。接着,我们使用 fgets
和 scanf
函数来接收用户输入的学生姓名和学号,并将其存储在相应的变量中。最后,我们使用 printf
函数将学生信息输出到屏幕上。
需要注意的是,在使用 fgets
函数接收用户输入的字符串时,我们需要手动删除末尾的换行符。这是因为 fgets
函数会将用户输入的换行符一并存储在字符串中。
另外,在定义联合体时,我们只能使用其中一个成员来存储数据。在上面的示例程序中,我们使用了 name
成员来存储学生姓名,然后又使用了 id
成员来存储学生学号。但是,这两个成员共用同一个内存空间,因此在存储 id
数据时,可能会覆盖之前存储的 name
数据。
总之,在使用结构体和联合体时,我们需要仔细考虑数据的存储方式和使用方式,以防止数据错误和程序崩溃。