내장형 하드웨어/C언어

C언어 - 열거형의 활용 (메시지 맵의 기본 형식)

동화다아아 2011. 8. 18. 16:37

- 열거형의 활용


#include<stdio.h>

const char*day[] = {
        
"월요일"
        
"화요일",
        
"수요일",
        
"목요일",
        
"금요일",
        
"토요일",
        
"일요일",            
          
0};
void MONDAY();
void TUESDAY();
void WENDSDAY();
void THURSDAY();
void FRIDAY();
void SATURDAY();
void SUNDAY();

enum day_num
{
        MON,
        TUE,
        WED,
        THU,
        FRI,
        SAT,
        SUN,

        END
};
int main()
{
        
int iNum;
        
for(iNum = MON; END > iNum; ++iNum)
        {
                printf(
"%s\n", day[iNum]);
        }
        
return 0;
}

⇒ 출력 결과         

 




#include<stdio.h>

void MONDAY();
void TUESDAY();
void WENDSDAY();
void THURSDAY();
void FRIDAY();
void SATURDAY();
void SUNDAY();

struct MessageMap
{
        
const char *name;
        
void (*fp)();    
};

struct MessageMap map[]={
        {
"월요일", MONDAY},
        {
"화요일", TUESDAY},
        {
"수요일", WENDSDAY},
        {
"목요일", THURSDAY},
        {
"금요일", FRIDAY},  
        {
"토요일", SATURDAY},
        {
"일요일", SUNDAY},
        {
00}
};
enum day_num
{
        MON,
        TUE,
        WED,
        THU,
        FRI,
        SAT,
        SUN,

        END
};

int main()
{
        
int iCnt; // 요일을 찾는다. 찾으면 해당하는 번호의 함수를 부르는 역활.
        
int  iRet;
        
int  iRet2;
        
char buff[10];
  
  
        
while(1)
        {
                write(
1"요일 입력>"10);    
                iRet 
= read(0, buff, sizeof(buff));
                buff[iRet-
1= 0;
                iRet 
= strlen(buff); // buff 길이를 확인
                
if(iRet == 0// 입력값이 없으면 종료
                
{
                        
break;
                }
                
for(iCnt = MON;iCnt<END;++iCnt)
                {
                        
//iRet = strcmp(map[iCnt].name, buff);
                        
iRet2 = strncmp(map[iCnt].name, buff, iRet);
                        
if(iRet2 == 0)
                        {
                                
break;
                        }      
                }  
                
if(iCnt >= END) // 요일이 정확히 입력 안되면 위로 다시 되돌린다.
                
{
                        
continue;
                }
                map[iCnt].fp(); 
//
        
}
  
        
return 0;
}
void MONDAY()
{
        printf(
"%s(MONDAY)\n", map[MON].name);
        
return ;
}
void TUESDAY()
{
        printf(
"%s(THESDAY)\n", map[TUE].name);
        
return ;
}
void WENDSDAY()
{
        printf(
"%s(WENDSDAY)\n", map[WED].name);
        
return ;
}
void THURSDAY()
{
        printf(
"%s(THURSDAY)\n", map[THU].name);
        
return ;
}
void FRIDAY()
{
        printf(
"%s(FRIDAY)\n", map[FRI].name);
        
return ;
}
void SATURDAY()
{
        printf(
"%s(SATURDAY)\n", map[SAT].name);
        
return ;
}
void SUNDAY()
{
        printf(
"%s(SUNDAY)\n", map[SUN].name);
        
return ;
}
⇒ 출력 결과