Ln Go

구조체 공용체 본문

C언어

구조체 공용체

Ln Ro 2021. 6. 1. 11:32
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct date {
   int year;
   int month;
   int day;
};
typedef struct date date;

struct fruit {
   char name[20];  //과일이름 name(문자열),
   int price; //가격 price(정수)      
   date expire; //만기일 expire(1번의 date 타입)
   char throw;  //폐기여부 throw(‘y’ 또는 ‘n’)  
};
typedef struct fruit fruit;

void ex_08() {
    fruit store[5] = {
        "apple", 500, 2020, 9, 1, 'n',
        "banana", 500, 2020, 7, 3, 'n',
        "orange", 500, 2022, 3, 31, 'n',
        "melon", 500, 2021, 11, 11, 'n',
        "mango", 500, 2021, 5, 30, 'n'
    };
    fruit *p;
   int size = sizeof(store)/sizeof(store[0]);
   int sum = 0;


    p=store;

    for(int i=0; i<size; i++) {
        printf("%d) name=%s, price=%d, year=%d, month=%d, day=%d, throw=%c\n",
            i, (p+i)->name, (p+i)->price, (p+i)->expire.year, (p+i)->expire.month, (p+i)->expire.day, (p+i)->throw);
    }
   time_t now = time(NULL);
   struct tm *today = localtime(&now);
  
   printf("\n오늘의 날짜 : %d년 %d월 %d일 \n\n",
      today->tm_year+1900, today->tm_mon+1, today->tm_mday);

   char day[10] = {'\0', };
   sprintf(day, "%04d%02d%02d", today->tm_year+1900, today->tm_mon+1, today->tm_mday);

   for(int i=0; i<size; i++) {
      char exp[10] = {'\0', };
      sprintf(exp, "%04d%02d%02d", (p+i)->expire.year, (p+i)->expire.month, (p+i)->expire.day);
      
      if(atoi(exp) <= atoi(day))
      {
          (p+i)->throw = 'y';
          sum += (p+i) -> price;
      }
         
   }
   printf("폐기가격 총합 : %d \n",sum);
   for(int i=0; i<size; i++) {
        printf("%d) name=%s, price=%d, year=%d, month=%d, day=%d, throw=%c\n",
            i, (p+i)->name, (p+i)->price, (p+i)->expire.year, (p+i)->expire.month, (p+i)->expire.day, (p+i)->throw);
    }
    
    
}
int main(int argc, char *argv[]) {
    ex_08();
    return 0;
}
Comments