読者です 読者をやめる 読者になる 読者になる

C言語 関数6(正しい年月日の判定)

/*******************************************************************************
西暦の年、月、日を入力し、正しい日付ならば"正しい日付です"、正しくない日付ならば"誤った日付です"と出力する。
---出力例---
SmallStepper$ ./a.out
年==>2012
月==>2
日==>29
2012年2月29日は、正しい日付です。
SmallStepper$ ./a.out
年==>2013
月==>2
日==>29
2013年2月29日は、誤った日付です。
SmallStepper$ ./a.out
年==>1899
月==>1
日==>15
1899年1月15日は、誤った日付です。
SmallStepper$ ./a.out
年==>1900
月==>1
日==>1
1900年1月1日は、正しい日付です。
SmallStepper$ ./a.out
年==>2100
月==>12
日==>31
2100年12月31日は、正しい日付です。
SmallStepper$ ./a.out
年==>2101
月==>1
日==>1
2101年1月1日は、誤った日付です。
SmallStepper$ ./a.out
年==>2013
月==>13
日==>31
2013年13月31日は、誤った日付です。
SmallStepper$ ./a.out
年==>2013
月==>0
日==>1
2013年0月1日は、誤った日付です。
SmallStepper$ ./a.out
年==>2013
月==>5
日==>31
2013年5月31日は、正しい日付です。
SmallStepper$ ./a.out
年==>2013
月==>6
日==>31
2013年6月31日は、誤った日付です。
SmallStepper$

********************************************************************************/
#include <stdio.h>
int ymd(int y, int m, int d);
int uruu(int seireki);



int main(void){
int y,m,d;
printf("年==>");
scanf("%d",&y);
printf("月==>");
scanf("%d",&m);
printf("日==>");
scanf("%d",&d);

if(ymd(y,m,d) == 1){
  printf("%d%d%d日は、正しい日付です。\n",y,m,d);
}else{
  printf("%d%d%d日は、誤った日付です。\n",y,m,d);
}
// printf("flag=%d\n",ymd(y,m,d));
  return 0;
}

int ymd(int y, int m, int d){
  int flag;
  if((y>=1900)&&(y<=2100)&&(m>=1)&&(m<=12)&&(d>=1)){
    if(((m==1)||(m==3)||(m==5)||(m==7)||(m==8)||(m==10)||(m==12))&&(d<=31)){
      flag=1;
    }else{
      if(((m==4)||(m==6)||(m==9)||(m==11))&&(d<=30)){
        flag=1;
      }else{
        if(uruu(y) == 1){
          if(d<=29){
            flag=1;
          }else{
            flag=0;
          }
        }else{
          if(d<=28){
            flag=1;
          }else{
            flag=0;
          }
        }
      }
    }
  }else{
    flag=0;
  }
  return flag;
  }


int uruu(int seireki){
  int hantei;
  if(seireki%400==0||(seireki%4==0&&!(seireki%100==0))){
      hantei=1;
  }else{
      hantei=0;
    }
  return hantei;

  }