[코딩도장] Unit 57
1. 열거형
1. 열거형 사용하기
열거형은 정수형 상수에 이름을 붙여 코드를 이해하기 쉽게 해준다
enum 키워드를 사용하여 정의하고 enumeration 에서 따왔다
enum DayOfWeek { // 열거형 정의
Sunday = 0, // 초깃값 할당
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
} (닫는 중괄호) 뒤에는 반드시 ; (세미콜론)을 붙여줘야 한다
열거형도 정의만 해서는 사용할 수 없다
enum DayOfWeek week;
열거형도 변수로 선언해서 사용한다
열거형의 값은 처음만 할당해주면 아래에 오는 값들은 1씩 증가하며 할당된다
아무것도 할당하지 않으면 0부터 시작한다
Sunday 에 0을 할당하면 Monday 는 1, Tuesday 는 2 가 된다
열거형도 typedef 로 별칭을 지정할 수 있다
typedef enum _DayOfWeek { // 열거형 이름은 _DayOfWeek
Sunday = 0,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
} DayOfWeek; // typedef를 사용하여 열거형 별칭을 DayOfWeek로 정의
DayOfWeek week; // 열거형 변수 선언
typedef 로 별칭을 만들었다면
DayOfWeek week; 로 변수를 선언할 수 있다
2. 열거형 활용하기
1. 열거형을 switch에 활용하기
열거형은 switch 분기문을 사용할 때 유용하다
게임을 만든다고 했을 때 캐릭터의 스킬을 열거형으로 정의할 수 있다
enum LuxSkill {
LightBinding = 1,
PrismaticBarrier,
LucentSingularity,
FinalSpark
};
캐릭터의 스킬을 열거형으로 정의하고
enum LuxSkill skill; // 열거형 변수 선언
skill = LightBinding; // 열거형 값 할당
switch (skill)
{
case LightBinding: // 열거형 값이 LightBinding일 때
printf("LightBinding\n");
break;
case PrismaticBarrier: // 열거형 값이 PrismaticBarrier일 때
printf("PrismaticBarrier\n");
break;
case LucentSingularity: // 열거형 값이 LucentSingularity일 때
printf("LucentSingularity\n");
break;
case FinalSpark: // 열거형 값이 FinalSpark일 때
printf("FinalSpark\n");
break;
default:
break;
}
열거형을 switch 에 사용하면
열거형 값에 따라 코드를 실행할 수 있다
열거형을 사용하여 case 를 스킬 이름으로 처리하고
프로그램은 1, 2, 3, 4 등의 값으로 처리한다
2. 열거형을 for 에 활용하기
열거형을 정의한 뒤 for 반복문을 활용하는 방법도 있다
typedef enum _DayOfWeek { // 열거형 이름은 _DayOfWeek
Sunday = 0, // 초깃값을 0으로 할당
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
DayOfWeekCount // 열거형 값의 개수를 나타내는 항목 추가
} DayOfWeek;
열거형을 위와 같이 정의하고 초깃값을 0으로 할당한다
열거형 값의 개수를 나타내는 DayOfWeekCount 와 같은 항목을 넣어준다
for (DayOfWeek i = Sunday; i < DayOfWeekCount; i++)
{
printf("%d\n", i);
}
반복문에서 열거형 별칭으로 변수 i 를 선언한다
그리고 i 가 DayWeekCount 보다 작을 때까지만 반복한다
이렇게 하면 Sunday 부터 Saturday 까지 반복할 수 있다
3. 심사문제
57.8 프로토콜 종류 정의하기
다음 소스 코드를 완성하여 6 5 4 가 출력되게 만드세요.
정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.
#include <stdio.h>
__________________________
__________________________
__________________________
__________________________
__________________________
int main()
{
enum PROTOCOL_TYPE p1, p2, p3;
p1 = PROTOCOL_TCP;
p2 = PROTOCOL_UDP;
p3 = PROTOCOL_IP;
printf("%d %d %d\n", p1, p2, p3);
return 0;
}
정답
enum PROTOCOL_TYPE {
PROTOCOL_IP = 4,
PROTOCOL_UDP,
PROTOCOL_TCP,
};
57.9 게임 캐릭터 스킬 처리하기
다음 소스 코드를 완성하여 "명상"이 출력되게 만드세요.
정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.
#include <stdio.h>
enum MasterYiSkill {
AlphaStrike = 1,
Meditation,
WujuStyle,
Highlander
};
int main()
{
___________________
___________________
switch (skill)
{
case AlphaStrike:
printf("일격 필살\n");
break;
case Meditation:
printf("명상\n");
break;
case WujuStyle:
printf("우주류 검술\n");
break;
case Highlander:
printf("최후의 전사\n");
break;
default:
break;
}
return 0;
}
정답
enum MasterYiSkill skill;
skill = Meditation;
57.10 인터페이스 타입 출력하기
다음 소스 코드를 완성하여 열거형 INTERFACE_TYPE 의 값이 모두 출력되게 만드세요. 단, InterfaceTypeUndefined 의 값은 출력하지 않아야 합니다.
정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.
#include <stdio.h>
// INTERFACE_TYPE은 Windows 커널의 winddk.h 헤더 파일에 정의된 열거형
typedef enum _INTERFACE_TYPE {
InterfaceTypeUndefined = -1,
Internal,
Isa,
Eisa,
MicroChannel,
TurboChannel,
PCIBus,
VMEBus,
NuBus,
PCMCIABus,
CBus,
MPIBus,
MPSABus,
ProcessorInternal,
InternalPowerBus,
PNPISABus,
PNPBus,
MaximumInterfaceType
} INTERFACE_TYPE, *PINTERFACE_TYPE;
int main()
{
________________________________________________________________
{
printf("%d ", i);
}
return 0;
}
정답
for (int i = Internal; i < MaximumInterfaceType; i++)
'Coding > C' 카테고리의 다른 글
[C언어] 함수 사용하기 - 코딩도장 (0) | 2024.02.02 |
---|---|
[C언어] 자료형 변환, 포인터 연산 - 코딩도장 (0) | 2024.01.30 |
[C언어] 공용체, 구조체 & 공용체 활용 - 코딩도장 (0) | 2024.01.24 |
[C언어] 구조체 멤버 정렬, 구조체 배열 - 코딩도장 (0) | 2024.01.22 |
[C언어] 구조체, 구조체 포인터 - 코딩도장 (0) | 2024.01.20 |