110 likes | 282 Views
7. chapter. Enumeration Types and typedef. 내 용. Enumeration Types The Use of typedef An Example : The Game of Paper, Rock, Scissors. Enumeration Types. 열거형 열거형을 선언하는데 사용 int 형의 상수 예. 태그이름 (tag name). enum day { sun, mon, tue, wed, thu, fri, sat }; enum day d1, d2 ; d1 = fri;.
E N D
7 chapter Enumeration Types and typedef
내 용 • Enumeration Types • The Use of typedef • An Example : The Game of Paper, Rock, Scissors
Enumeration Types • 열거형 • 열거형을 선언하는데 사용 • int 형의 상수 • 예 태그이름(tag name) enum day { sun, mon, tue, wed, thu, fri, sat }; enum day d1, d2; d1 = fri; 첫번째 원소인 sun은 기본적으로 0의 값을 갖고, 각 열거된 순서에 따라 1,2,.. 등의 정수 값을 가진다. 변수 d1, d2를 enum day 형으로 선언.d1, d2는 집합내의 원소만을 값으로 가짐
Enumeration Types • 열거자 • 초기화 가능 • 선언된 후 바로 이여 변수들을 선언 가능 • 예 1 • 예 2 enum suit {clubs = 1, diamonds, hearts, spades} a, b, c; diamonds=2, hearts=3, spades=4 enum fruit {apple = 7, pear, orange = 3, lemon} frt; pear=8, lemon=4
Enumeration Types • 열거자 • 태그 이름이 없을 수도 있다. • 한 함수내의 변수와 열거자는 서로 다른 유일한 식별자를 가져야 한다. enum {fir, pine} tree;
The Use of typedef • typedef • 특정한 응용에 적합한 형의 이름을 사용할 수 있도록 한다. • 열거형 및 구조형과 같은 복잡하고 긴 사용자 정의 형을 프로그래머가 만들 때, 그 복잡성을 제어하는 데 도움이 된다. • typedef로 정의된 type은 변수나 함수 선언시 보통의 type과 똑같이 사용될 수 있다. • 예 color를 int와 동일한 형으로 만듬 Typedef int color; Color red, blue, green; 다른 보통의 형이 사용되는 것과 똑같은 방법으로 color 형을 선언에서 사용
The Use of typedef • typedef를 사용하는 목적 • 긴 선언문을 축약해서 사용 • 사용 목적에 맞게 type이름을 결정하여, readability를 향상 • 사용하는 컴퓨터에 따라 int 의 크기가2또는 4 byte가 되는데, 이러한 경우 typedef를 사용함으로써 프로그램의 이식을 쉽게 함
The Use of typedef • 예제 : 다음 날을 계산하는 프로그램 enum day {sun, mon, tue, wed, thu, fri, sat}; typedef enum day day; day find_next_day(day d) { day next_day; switch (d) { case sun: next_day = mon; break; case mon: next_day = tue; break; case sat: next_day = sun; break; } return next_day; } 캐스트 연산자를 사용한 경우 enum day {sun, man, tue, wed, thu, fri, sat}; typedef enum day day; day find_next_day(day d) { return ((day) (((int) d + 1) % 7)); }
An Example : The Game of Paper, Rock, Scissors • 가위,바위,보 게임- In file p_r_s.h: #include <ctype.h> /* for isspace() */ #include <stdio.h> /* for printf(), etc */ #include <stdlib.h> /* for rand() and srand() */ #include <time.h> /* for time() */ enum p_r_s {paper, rock, scissors, game, help, instructions, quit}; enum outcome {win, lose, tie, error}; typedef enum p_r_s p_r_s; typedef enum outcome outcome; outcome compare(p_r_s player_choice, p_r_s machine_choice); void prn_final_status(int win_cnt, int lose_cnt); void prn_game_status(int win_cnt, int lose_cnt, int tie_cnt); void prn_help(void); void prn_instructions(void); void report(outcome result, int *win_cnt_ptr, int *lose_cnt_ptr, int *tie_cnt_ptr); p_r_s selection_by_machine(void); p_r_s selection_by_player(void);
An Example : The Game of Paper, Rock, Scissors • 가위,바위,보 게임-In file main.c: #incude p_r_s.h int main(void) { int win_cnt = 0, lose_cnt = 0, tie_cnt = 0; outcomeresult; p_r_s player_choice, machine_choice; . srand(time(NULL)); /* seed the random number generator */ prn_instructions(); enum outcome {win, lose, tie, error}; enum p_r_s {paper, rock, scissors, game, help, instructions, quit}; 사용자에게 게임 방법을 알려줌
An Example : The Game of Paper, Rock, Scissors • 가위,바위,보 게임-In file main.c: while ((player_choice = selection_by_player()) != quit) switch (player_choice) { case paper: case rock: case scissors: machine_choice = selection_by_machine(); result = compare(player_choice, machine_choice); report(result, &win_cnt, &lose_cnt, &tie_cnt); break; case game: prn_game_status(win_cnt, lose_cnt, tie_cnt); break; case instructions: prn_instructions(); break; case help: prn_help(); break; default: printf("PROGRAMMER ERROR: Cannot get to here!\n\n"); exit(l); } 게임을 하기 위해 컴퓨터와 사용자는 가위, 바위, 보 중 하나를 선택 게임을 하기 위해 컴퓨터와 사용자는 가위, 바위, 보 중 하나를 선택 컴퓨터와 사용자의 가위, 바위, 보 중 하나를 선택 사용자에게 한 회 경기의 결과를 알려주고, 승, 패, 무승부의 수를 증가