C 计算枚举

C 计算枚举,c,C,有没有办法计算枚举?我有一个已合并到结构中的枚举: typedef enum {MW, TR} days; typedef struct { int hour, min; } Time; typedef struct { char Dept[5]; int course, sect; days meet_days; Time start, end; char instr[20]; } sched_record; 我的枚举打印语句是: data[i].meet_da

有没有办法计算枚举?我有一个已合并到结构中的枚举:

typedef enum {MW, TR} days;

typedef struct {
  int hour, min;
} Time;

typedef struct {
  char Dept[5];
  int course, sect;
  days meet_days;
  Time start, end;
  char instr[20];
} sched_record;
我的枚举打印语句是:

 data[i].meet_days == MW ? "MW" : "TR"
我想做的是让我的sched_记录的typedef结构只打印包含say MW的记录。我的程序“菜单”如下所示:

 fread(data, sizeof(sched_record), MAX_RECORD, filePointer);
        fclose(filePointer);
        printf("Enter the Department or A for any Department: ");
        scanf("%s", tempDept);
        printf("Enter the Course or 0 for any course: ");
        scanf("%d", &tempCourse);
        printf("Enter the Days; M = MW, T = TTH or D=Don't Care: ");
        scanf("%s", tempDay);
        printf("Enter the Time; A=Mornings, P=Afternoons or D=Don't Care: ");
        scanf("%s", tempTime);
我得到了我的sched_记录,通过一个简单的语句按时间打印出来:

 else if ((strcmp(tempDept, "A")==0) && tempCourse == 0 && (strcmp(tempDay, "D")==0) && (strcmp(tempTime, "P")==0)) {
                            if (data[i].start.hour >= 12) {  // <---Time comparison
                                printf("%s %d %d %2s %02d%02d %02d%02d %s\n", data[i].Dept, data[i].course, data[i].sect, data[i].meet_days == MW ? "MW" : "TR",
                                   data[i].start.hour, data[i].start.min, data[i].end.hour, data[i].end.min, data[i].instr);
                     }
                }

                else if ((strcmp(tempDept, "A")==0) && tempCourse == 0 && (strcmp(tempDay, "M")==0) && (strcmp(tempTime, "D")==0)) {
                        printf("\n%s %d", data[i].Dept, data[i].course);
else if((strcmp(tempDept,“A”)==0)和tempCourse==0&&(strcmp(tempDay,“D”)==0)和&(strcmp(testime,“P”)==0)){

如果(data[i].start.hour>=12){/,则可以使用与任何其他整数变量相同的方式比较枚举值:

if (data[i].meet_days == MW)
  .....
或者,如果您有一个所有天的枚举:

enum days {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
然后您可以像这样测试范围:

if (day >= Monday || day <= Friday)
  printf ("It's a weekday!\n");

如果(day>=Monday | | day您可以使用与任何其他整数变量相同的方式比较枚举值:

if (data[i].meet_days == MW)
  .....
或者,如果您有一个所有天的枚举:

enum days {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
然后您可以像这样测试范围:

if (day >= Monday || day <= Friday)
  printf ("It's a weekday!\n");

如果(day>=Monday | | day则另一种方法是定义枚举值以设置特定的位。例如,确保“周一”到“周五”都有特定的位设置:

因此:

然后,在检查当天是否为工作日时:

if (day & WEEKDAY) {
 printf("Day %d is a weekday!\n", day);
}
通过使用XMACRO,你甚至可以更喜欢它……但我将把它作为练习留给OP:)


使用bitflag方法可以为天数添加额外的任意分类,而无需始终进行范围比较

另一种方法是定义枚举值以设置特定的位。例如,确保“星期一”到“星期五”的天数都有特定的位集:

因此:

然后,在检查当天是否为工作日时:

if (day & WEEKDAY) {
 printf("Day %d is a weekday!\n", day);
}
通过使用XMACRO,你甚至可以更喜欢它……但我将把它作为练习留给OP:)


使用bitflag方法,您可以为自己的工作日添加额外的任意分类,而无需始终进行范围比较

请不要标记没有提到带标记套接字的套接字的问题。出于同样的原因,我必须至少对您以前的一个问题进行标记。@JonathanLeffler对此表示抱歉。T他是socket程序的一部分,但我明白了这个想法。为什么你不能做
if(data[I]。meet_days==MW)
?您是否正在寻找一种在字符串值和枚举常量之间转换的方法?或者一种打印对应于枚举常量的字符串的方法?程序中的字符串是您希望用户键入的字符串吗?请不要用标记套接字标记未提及套接字的问题。我必须至少取消标记一个以前的任务出于同样的原因,你被解雇了。@JonathanLeffler对此表示抱歉。这是socket程序的一部分,但我明白了。如果(数据[I]。见面天数==MW),为什么你不能执行
if
?您是在寻找一种在字符串值和枚举常量之间转换的方法?还是一种打印对应于枚举常量的字符串的方法?程序中的字符串是您希望用户键入的字符串吗?它有和没有。我刚刚找到了它。我完全按照您的第一句话做了。谢谢!它有和没有。我我想起来了。我完全按照你的第一句话做了。谢谢!