有没有办法评估枚举?我有一个被合并到struct中的枚举:
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语句是:
data[i].meet_days == MW ? "MW" : "TR"我正在尝试做的是让我的sched_record的类型定义函数结构只打印其中包含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_records通过一句简单的语句按时间打印出来:
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);我想知道是否有像时间比较这样的简单方法来对枚举做同样的事情。如果是这样的话,有人能给我看看吗?
发布于 2012-05-02 23:38:35
您可以使用与任何其他整数变量相同的方式比较枚举值:
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");希望这能有所帮助。
发布于 2012-05-03 02:05:43
一种不同的方法是将枚举值定义为具有特定的位集。例如,确保“星期一”到“星期五”的每一天都有一个特定的位设置:
因此:
#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;然后,在检查这一天是否为工作日时:
if (day & WEEKDAY) {
printf("Day %d is a weekday!\n", day);
}您可以通过使用XMACRO来实现更高级的功能。但我将把它作为操作的练习:)
使用bitflag方法允许您为您的日期添加额外的任意分类,而无需一直进行范围比较
https://stackoverflow.com/questions/10416830
复制相似问题