2012-05-02 74 views
0

有沒有一種方法來評估一個枚舉?我有一個納入一個結構枚舉:評估一個枚舉

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我的typedef結構僅打印有說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); 

我想知道是否有像一個簡單的方法與enum做相同的時間比較。如果有人可以讓我看看?

+0

請不要標記不提與標籤插座插孔的問題。出於同樣的原因,我必須解決至少一個以前的問題。 –

+0

@JonathanLeffler對不起。這是套接字程序的一部分,但我看到了這個想法。 –

+0

爲什麼你不能'如果(data [i] .meet_days == MW)''? – twain249

回答

2

您可以以同樣的方式與任何其他整數變量比較枚舉值:

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"); 

希望有幫助。

+0

它做了,它沒有。我只是想出了它。我確實做了你的第一個陳述。謝謝! –

1

一種不同的方法來這是定義枚舉值有一定的位設置。例如,確保天星期一'到「星期五」都有特定的位集:

這樣的:

#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這個..得到更炫,但我會離開,作爲一個練習OP: )

使用位標誌的方法可以讓你添加額外的任意分類爲您的天沒有實際做比較,不等所有的時間