假设您有一艘船上有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;


这将简化您要尝试执行的操作,因为您不再需要处理字符串。

为了用每个组合填充一个数组,您别无选择,要编写将遍历所有组合的函数。

09-30 20:30