ポイントカードの日付について
Posted: 2007年11月12日(月) 00:25
構造体で日付を入力したときに、例えば4月1日なら、3月31日を期限にしたいとき、構造体の日付から1ひいたら31にはなりませんよね??そうなるようにするにはどうしたらようでしょうか??
#include <stdio.h> typedef struct{ int month,day; }dat_t; int main(void){ int i,month_day[12]={31,28,31,30,31,30,31,31,30,31,30,31},back; dat_t dat; dat.month=4-1;//最初4月とする dat.day=1;//最初1日とする。 printf("何日戻りますか?\n"); scanf("%d",&back); for(i=0;i<back;i++){//戻る日分ループ dat.day--;//1日前に戻る if(dat.day<=0){//その日が0日以下なら dat.month=dat.month-1;//前の月に戻す if(dat.month<=0)//その月が0以下なら dat.month=11;//去年に戻す dat.day=month_day[dat.month];//決定した月の日にちを格納 } } printf("%d月%d日です\n",dat.month+1,dat.day); }
#include<stdio.h> const int monthDay[12]={31,28,31,30,31,30,31,31,30,31,30,31}; struct tg_dat{ int month, day; }; typedef struct tg_dat dat_t; dat_t getCallenderDay(int); int getWideDay(dat_t); int main() { dat_t nowDay,beforeDay; int back; printf("今日は何月ですか?: "); scanf("%d",&nowDay.month); printf("今日は何日ですか?: "); scanf("%d",&nowDay.day); printf("何日戻りますか?: "); scanf("%d",&back); beforeDay =getCallenderDay(getWideDay(nowDay)-back); printf("%d月%d日です",beforeDay.month,beforeDay.day); return 0; } dat_t getCallenderDay(int wideDay) { int i=0; dat_t dat; dat.month=1; while(wideDay>monthDay){ wideDay -=monthDay; dat.month++; i++; } dat.day = wideDay; return dat; } int getWideDay(dat_t dat) { int i=0; int wideDay=0; while(dat.month>1){ wideDay+=monthDay; i++; dat.month--; } wideDay+=dat.day; return wideDay; }