2012-05-02 9 views
0

enumを評価する方法はありますか?enumを評価する

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

すべての時間は、タグソケットとソケットを言及していない質問をタグ付けしないでください比較がありました。同じ理由であなたの質問を少なくとも1つ取り消さなければなりませんでした。 –

+0

@JonathanLefflerごめんなさい。これはソケットプログラムの一部ですが、私はその考えを見ます。 –

+0

どうすれば 'if(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のための練習としてすることを残しておきます: )ビットフラグのアプローチを使用して

は、あなたが実際にやってなくて、あなたの日のための追加的な任意の分類を追加することができます