假设您有一艘船上有12位乘客。他们每个人都是不同的。
这12名乘客分为以下几类:
类
年龄
性别
这些类别中的每一个可以有2个不同的选项:
类是“第一”或“第二”
年龄是“成人”还是“孩子”
性别是“男性”还是“女性”
我决定创建一个名为“ Passenger”的struct类型的新数据类型。如下面的代码所示,它具有三个成员:班级,年龄,性别。
然后,我为此新创建的数据类型(Passenger)创建一个变量(allPassengers)。
但是现在,我如何使用有关旅客的所有12种不同组合来填充名为“ allPassengers”的旅客类型数组?
例如。我手动创建了前三个组合:
#include < stdio.h > #include < string.h >
typedef struct {
char class[7];
char age[6];
char gender[7];
}
Passenger;
/* This is where all the information about passengers will be stored, global variable,
there are 9 combinations of passengers (allocated array elements for the variable), last one is reserved for the null character \0 */
Passenger allPassengers[10];
int main() {
// First combination
strcpy(allPassengers[0].class, "first");
strcpy(allPassengers[0].age, "adult");
strcpy(allPassengers[0].gender, "male");
// Second combination
strcpy(allPassengers[1].class, "second");
strcpy(allPassengers[1].age, "adult");
strcpy(allPassengers[1].gender, "male");
// Third combination
strcpy(allPassengers[2].class, "first");
strcpy(allPassengers[2].age, "child");
strcpy(allPassengers[2].gender, "male");
// ... etc
return 0;
}
Here's相同的代码(易于复制粘贴)。
我知道用数字(用于循环)填充数组会很容易。但是我不知道如何用必要的信息来填写例如前两个
allPassengers[0]
和allPassengers[1]
。我想我会在for循环中编写一个复杂的“ if语句”,例如检查先前所有乘客的舱位,例如如果匹配项超过2个,则将类别分配为“第二”。或开关盒...不知道。如果我必须填写更难的组合怎么办。
如何只允许变量使用有限的字符串?例如上课可以选“第一”还是“第二”?
有什么线索吗?
最佳答案
如果您的数据严格限于您所说的特定值,则建议您创建枚举类型。
范例:
enum ClassEnum{
FIRST,
SECOND
};
enum AgeEnum{
ADULT,
CHILD
};
enum GenderEnum{
MALE,
FEMALE
};
typedef struct {
ClassEnum class;
AgeEnum age;
GenderEnum gender;
}
Passenger;
这将简化您要尝试执行的操作,因为您不再需要处理字符串。
为了用每个组合填充一个数组,您别无选择,要编写将遍历所有组合的函数。