2012-05-02 6 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; 

열거에 대한 나의 인쇄 문은 다음과 같습니다 :

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

enum과 같은 시간 비교. 그렇다면 누군가 나를 보여줄 수 있습니까?

+0

태그 소켓 소켓을 언급하지 않는 질문에 태그를하지 마십시오 원거리 비교 모든 시간을 일을하지 않고 일 동안 추가로 임의 분류를 추가 할 수 있습니다. 나는 같은 이유로 적어도 당신의 질문 하나를 언약해야만했습니다. –

+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를 사용하여도 애호가를 얻을 수 있지만이 영업 이익에 대한 연습으로 있음을 떠날 것이다 :) 비트 플래그의 방법을 사용

실제로

관련 문제