首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >评估枚举

评估枚举
EN

Stack Overflow用户
提问于 2012-05-02 23:27:13
回答 2查看 447关注 0票数 0

有没有办法评估枚举?我有一个被合并到struct中的枚举:

代码语言:javascript
复制
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;

我对枚举的print语句是:

代码语言:javascript
复制
 data[i].meet_days == MW ? "MW" : "TR"

我正在尝试做的是让我的sched_record的类型定义函数结构只打印其中包含MW的记录。我对程序的“菜单”如下:

代码语言:javascript
复制
 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_records通过一句简单的语句按时间打印出来:

代码语言:javascript
复制
 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);

我想知道是否有像时间比较这样的简单方法来对枚举做同样的事情。如果是这样的话,有人能给我看看吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-02 23:38:35

您可以使用与任何其他整数变量相同的方式比较枚举值:

代码语言:javascript
复制
if (data[i].meet_days == MW)
  .....

或者,假设您有一个所有日期的枚举:

代码语言:javascript
复制
enum days {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};

然后,您可以像这样测试范围:

代码语言:javascript
复制
if (day >= Monday || day <= Friday)
  printf ("It's a weekday!\n");

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2012-05-03 02:05:43

一种不同的方法是将枚举值定义为具有特定的位集。例如,确保“星期一”到“星期五”的每一天都有一个特定的位设置:

因此:

代码语言:javascript
复制
#define WEEKDAY 0x100
typedef enum {
 SUNDAY   = 1,
 MONDAY   = 2 | WEEKDAY,
 TUESDAY  = 3 | WEEKDAY,
 WEDNESDAY= 4 | WEEKDAY,
 THURSDAY = 5 | WEEKDAY,
 FRIDAY   = 6 | WEEKDAY,
 SATURDAY = 7
} days;

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

代码语言:javascript
复制
if (day & WEEKDAY) {
 printf("Day %d is a weekday!\n", day);
}

您可以通过使用XMACRO来实现更高级的功能。但我将把它作为操作的练习:)

使用bitflag方法允许您为您的日期添加额外的任意分类,而无需一直进行范围比较

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10416830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档