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
?您是在寻找一种在字符串值和枚举常量之间转换的方法?还是一种打印对应于枚举常量的字符串的方法?程序中的字符串是您希望用户键入的字符串吗?它有和没有。我刚刚找到了它。我完全按照您的第一句话做了。谢谢!它有和没有。我我想起来了。我完全按照你的第一句话做了。谢谢!