반응형
삼각형, 사각형, 원을 동시에 표현할 수 있는 공용체를 설계하라. 삼각형은 밑변과 높이, 사각형은 가로와 세로, 원은 반지름만을 저장하도록 하라. 현재의 공용체가 표현하고 있는 도형의 종류는 열거형 변수를 사용하여 나타낸다. 사용자로부터 도형의 종류와 도형의 데이터를 받아서 저장하여 보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <stdio.h> enum figure {TRI, RECT, CIRC}; struct shape{ enum figure type; union{ struct{int base; int height;} tri; struct{int width; int height;} rect; struct{int radius;} circ; } data;}; int main(void) { struct shape a; a.type=TRI; while(1){ printf("도형의 종류를 입력하세요(0:삼각형 1:직사각형 2:원 3:종료) : "); scanf("%d", &a.type); getchar(); if(a.type==TRI) {printf("밑변을 입력하세요: "); scanf("%d", &a.data.tri.base); printf("높이를 입력하세요: "); scanf("%d", &a.data.tri.height); printf("밑변 : %d 높이 :%d\n", a.data.tri.base, a.data.tri.height);} else if(a.type==RECT) {printf("가로를 입력하세요: "); scanf("%d", &a.data.rect.width); printf("높이를 입력하세요: "); scanf("%d", &a.data.rect.height); printf("가로 : %d 높이 : %d\n", a.data.rect.width, a.data.rect.height);} else if(a.type==CIRC) {printf("지름을 입력하세요: "); scanf("%d", &a.data.circ.radius); printf("지름 :%d\n", a.data.circ.radius);} else if(a.type==3) break; else {printf("잘못된 입력입니다.\n");}}; } | cs |
주의할 점은 우리가 enum으로 열거형 변수를 설정했다 하더라도 scanf로 받을 때는 그에 해당하는 실제 정수 값
(TRI=0, RECT=1, CIRC=2라던가..) 을 입력해 주어야 한다는 것이다. 만약 실제로 TRI, RECT, CIRC 를 입력해서
프로그램이 작동하게 하려면, strcmp를 이용하여 정수값 0, 1, 2를 출력하는 function을 따로 만들어야 할 것이다.
그리고 enum으로는 0,1,2, 밖에 없지만 추가적으로 3이나 4를 입력해도 이상이 없다는 점을 발견했다.
반응형