📅  最后修改于: 2023-12-03 15:14:26.652000             🧑  作者: Mango
在C语言中,结构体(Structure)、共同体(Union)和枚举(Enum)都是用户自定义的数据类型。它们可以作为容器,将多个不同类型的数据组合在一起,便于管理和操作。其中:
结构体是由多个不同类型的数据组成的集合,每个数据可以有自己的名字和类型。结构体被定义后,可以通过结构体变量来访问其中的数据成员。
共同体也是由多个不同类型的数据组成的集合,但所有数据共用一块内存空间。在不同的使用情况下,我们需要指定使用哪个成员。
枚举是一种特殊的数据类型,它将一些常量封装成一个集合, 常用于代表一组相关的取值.
假设我们需要管理一家商店的库存信息,每个商品需要记录它的名称、价格和数量。我们可以使用结构体来定义一个商品信息的类型:
struct Item {
char name[20];
float price;
int quantity;
};
现在我们需要实现以下功能:
添加一个商品信息
显示所有商品信息
删除一个商品信息
修改一个商品信息
为了进行更好的管理,我们可以使用菜单来实现不同操作的选择。
可以使用以下代码实现以上需求:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_ITEMS 10
struct Item {
char name[20];
float price;
int quantity;
};
struct Item items[MAX_ITEMS];
int num_items = 0;
void print_menu() {
printf("\n1. Add an item");
printf("\n2. Delete an item");
printf("\n3. Modify an item");
printf("\n4. Show all items");
printf("\n5. Exit");
}
void add_item() {
if (num_items >= MAX_ITEMS) {
printf("\nCannot add more items");
return;
}
struct Item item;
printf("\nEnter name: ");
scanf("%s", item.name);
printf("\nEnter price: ");
scanf("%f", &item.price);
printf("\nEnter quantity: ");
scanf("%d", &item.quantity);
items[num_items] = item;
num_items++;
}
void delete_item() {
if (num_items == 0) {
printf("\nNo items to delete");
return;
}
char name[20];
printf("\nEnter name: ");
scanf("%s", name);
int i;
for (i = 0; i < num_items; i++) {
if (strcmp(items[i].name, name) == 0) {
int j;
for (j = i; j < num_items - 1; j++) {
items[j] = items[j + 1];
}
num_items--;
printf("\nItem deleted successfully");
return;
}
}
printf("\nItem not found");
}
void modify_item() {
if (num_items == 0) {
printf("\nNo items to modify");
return;
}
char name[20];
printf("\nEnter name: ");
scanf("%s", name);
int i;
for (i = 0; i < num_items; i++) {
if (strcmp(items[i].name, name) == 0) {
printf("\nEnter new price: ");
scanf("%f", &items[i].price);
printf("\nEnter new quantity: ");
scanf("%d", &items[i].quantity);
printf("\nItem modified successfully");
return;
}
}
printf("\nItem not found");
}
void show_items() {
if (num_items == 0) {
printf("\nNo items to show");
return;
}
printf("\nName\tPrice\tQuantity\n");
int i;
for (i = 0; i < num_items; i++) {
printf("%s\t%.2f\t%d\n", items[i].name, items[i].price, items[i].quantity);
}
}
int main() {
int choice;
do {
print_menu();
printf("\nEnter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
add_item();
break;
case 2:
delete_item();
break;
case 3:
modify_item();
break;
case 4:
show_items();
break;
case 5:
printf("\nGoodbye!");
break;
default:
printf("\nInvalid choice");
break;
}
} while (choice != 5);
return 0;
}
结构体、共同体和枚举是C语言中重要的高级数据类型,能够将多个不同类型的数据组合成一个整体。在实际应用中,它们广泛用于管理和操作复杂的数据结构,如链表、树等。熟练掌握这些数据类型,对于C语言程序员来说是必不可少的。