📜  C |结构与联合|问题7(1)

📅  最后修改于: 2023-12-03 15:13:47.435000             🧑  作者: Mango

C | 结构与联合 | 问题7

在 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 函数中,我们定义了 su 两个变量,分别是结构体和联合体类型。接着,我们使用 fgetsscanf 函数来接收用户输入的学生姓名和学号,并将其存储在相应的变量中。最后,我们使用 printf 函数将学生信息输出到屏幕上。

需要注意的是,在使用 fgets 函数接收用户输入的字符串时,我们需要手动删除末尾的换行符。这是因为 fgets 函数会将用户输入的换行符一并存储在字符串中。

另外,在定义联合体时,我们只能使用其中一个成员来存储数据。在上面的示例程序中,我们使用了 name 成员来存储学生姓名,然后又使用了 id 成员来存储学生学号。但是,这两个成员共用同一个内存空间,因此在存储 id 数据时,可能会覆盖之前存储的 name 数据。

总之,在使用结构体和联合体时,我们需要仔细考虑数据的存储方式和使用方式,以防止数据错误和程序崩溃。