본문 바로가기

과제모음

[컴프2]구조체, 공용체, 열거형(struct, union & enum)

반응형

#include <stdio.h>
#include <stdlib.h>

enum StructType{CHAR = 1,INT,FLOAT,DOUBLE}; // 열거형
union DataType{ // 공용체
 char a;
 int b;
 float c;
 double d;
};
struct DataStruct{ // 구조체
 enum StructType AA;
 union DataType BB;
};

void mallocex(){ // 동적할당
 int n;
 int i;
 struct DataStruct *use;
 
 printf("Input size : ");
 scanf_s("%d", &n); // 사이즈 입력

 use = (struct DataStruct *)malloc(sizeof(struct DataStruct)*n); // 동적할당

 for(i=0; i<n; i++){ // 사이즈만큼 입력
  printf("selsect type\n");
  printf("1.Char\t2.Int\t3.float\t4.Double\n--->"); // type 입력
  scanf_s("%d", &use[i].AA);

  if(use[i].AA == 1){ // 캐릭터
   printf("Input Char size[%d] : ", i);
   fflush(stdin);
   scanf_s("%c", &use[i].BB.a);
  }
  else if(use[i].AA == 2){ // 정수
   printf("Input Int size[%d] : ", i);
   fflush(stdin);
   scanf_s("%d", &use[i].BB.b);
  }
  else if(use[i].AA == 3){ // 플롯트
   printf("Input Float size[%d] : ", i);
   fflush(stdin);
   scanf_s("%f", &use[i].BB.c);
  }
  else if(use[i].AA == 4){ // 더블
   printf("Input Double size[%d] : ", i);
   fflush(stdin);
   scanf_s("%lf", &use[i].BB.d);
  }
 }

 for(i=0; i<n; i++){ // 플래그따라서 출력
  if(use[i].AA == 1){
   printf("Char size[%d] : %c\n", i, use[i].BB.a);
  }
  else if(use[i].AA == 2){
   printf("Int size[%d] : %d\n", i,use[i].BB.b);
  }
  else if(use[i].AA == 3){
   printf("Float size[%d] : %f\n", i,use[i].BB.c);
  }
  else if(use[i].AA == 4){
   printf("Double size[%d] : %lf\n", i,use[i].BB.d);
  }
 }

 free(use); // 자유화
}


void main(){
 mallocex();
}

반응형