ポイントカードの日付について
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;
}