못정함
열거형 datatype : enum 본문
열거형 datatype은 자동으로 인덱스가 지정됨
chat gpt께서 힘써주심
C언어에서 **열거형 데이터 타입(enum)**은 상수 집합을 정의할 때 사용되는 데이터 타입입니다. 즉, 여러 상수 값에 이름을 부여하여 코드의 가독성을 높이는 역할을 합니다. 열거형은 기본적으로 정수형 데이터를 사용하며, 각 상수는 0부터 시작하는 정수 값으로 자동 할당됩니다. 하지만 필요에 따라 특정 값을 지정할 수도 있습니다.
### 열거형 정의 방법
```c
enum 열거형이름 { 상수1, 상수2, 상수3, ... };
```
enum 열거형이름 { 상수1, 상수2, 상수3, ... };
### 예시
#include <stdio.h>
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY };
int main() {
enum Day today;
today = WEDNESDAY;
printf("오늘은 %d번째 요일입니다.\n", today); // 2번째 요일 출력
return 0;
}
### 설명
- `enum Day`라는 열거형을 정의했습니다. `MONDAY`는 0, `TUESDAY`는 1, `WEDNESDAY`는 2와 같이 값이 자동으로 할당됩니다.
- 변수 `today`에 `WEDNESDAY`를 할당하면 2라는 값을 저장하게 됩니다.
### 열거형에 값 할당하기
각 상수에 원하는 값을 직접 할당할 수도 있습니다.
enum Day { MONDAY = 1, TUESDAY, WEDNESDAY, THURSDAY = 10, FRIDAY, SATURDAY, SUNDAY };
이 경우 `MONDAY`는 1, `TUESDAY`는 2, `WEDNESDAY`는 3, `THURSDAY`는 10, `FRIDAY`는 11, `SATURDAY`는 12, `SUNDAY`는 13으로 할당됩니다.
### 열거형의 장점
1. 코드 가독성 향상: 상수 값에 의미 있는 이름을 부여할 수 있습니다.
2. 코드 유지보수 용이: 상수 값을 변경해도 해당 이름을 사용하는 부분만 수정하면 됩니다.
3. 디버깅 편의성: 이름을 통해 상수 값을 쉽게 이해할 수 있습니다.
필요한 경우, 열거형은 강력한 도구가 될 수 있습니다!
자료구조 5장
수업 중
이거 땜에 공부한 것임
/* 열거형 타입 precedence 선언 */
typedef enum {lparen, rparen, plus, minus, times, divide, mod, eos, operand} precedence;
//열거형 타입은 자동으로 인덱스가 지정됨.
//lapren 자체가 index 0이라고 생각....해도 됨
precedence stack[MAX_STACK_SIZE]; int top=-1;/* 스택선언 */
char expr[MAX_EXPR_SIZE]; /* 입력 문자열 */
/*우선순위 설정*/
static int isp[] = {0,19,12,12,13,13,13,0};
static int icp[] = {20,19,12,12,13,13,13,0};
/*사실 여기서 우선순위가 바로 설정되는 건 아니고
아래 postfix 함수의
else { while(isp[stack[top]] >= icp[token]) 에서 비교할 때 쓰이는 것임(?)
과정을 뜯어보면...
isp[lapren] >= icp[minus]
isp[1] > = icp[4]
0 > = 12
인지 비교
/* 중위표기를 후위표기로 바꾸는 프로그램 */
void postfix(void) {
char symbol; // Q. 얘는 for문에서 어떻게 자동으로 증가되는거지? => get_token에서 *symbol = expr[(*n)++]; ???
precedence token;
int n = 0;
push(eos);
for(token = get_token(&symbol, &n); token != eos; token = get_token(&symbol, &n)) {
if(token == operand) printf("%c", symbol); // &symbol 은 symbol의 주소를 의미 ?
else if(token == rparen) {
while(stack[top] != lparen)
printf("%c",print_token(pop()));
pop(); //왼쪽 괄호 제거
}
else { while(isp[stack[top]] >= icp[token]) //이거 관련 사항은 윗 부분에 주석 달아놨음
printf("%c",print_token(pop()));
push(token);
}
}
while((token = pop()) != eos)
printf("%c ",print_token(token));
printf("\n");
}
우선 순위 비교
else { while(isp[stack[top]] >= icp[token]) //이거 관련 사항은 윗 부분에 주석 달아놨음
printf("%c",print_token(pop()));
push(token);
}
열거형 덕에 쉽게 index처럼 비교할 수 있는 것임
'C언어 공부 > C언어 기타' 카테고리의 다른 글
배열 size 관련 #define MAX_SIZE 100 / sizeof() (1) | 2024.09.18 |
---|