c语言设计:如何判断输入的日期和月份匹配?必须闰年二月三十日可以判断出是错误的,三月32日是错的?

如题所述

#include "stdio.h"

int main(int argc,char *argv[]){

int y,y0,m,m0,d,d0,w,mt[12]={31,28,31,30,31,30,31,31,30,31,30,31},s,i,t;

const char wt[][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

printf("Please enter y0-m0-d0 & w0(int)...\n");

if(scanf("%d-%d-%d%d",&y0,&m0,&d0,&w)!=4 || y0<0 || m0<1 || m0>12 || d0<1

|| (mt[1] = y0%4==0 && y0%100 || y0%400==0 ? 29 : 28,d0>mt[m0-1])

|| w<0 || w>6){//0表示星期天

printf("Input error, exit...\n");

return 0;

}

for(s=d0,t=m0-1,i=0;i<t;s+=mt[i++]);

printf("Please enter y-m-d(int)...\n");

if(scanf("%d-%d-%d",&y,&m,&d)!=3 || y<y0 || m<1 || m>12 || d<1

|| (mt[1] = y%4==0 && y%100 || y%400==0 ? 29 : 28,d>mt[m-1])

|| y==y0 && m<m0 || y==y0 && m==m0 && d<d0){

printf("Input error, exit...\n");

return 0;

}

for(s=d-s,t=m-1,i=0;i<t;s+=mt[i++]);

for(i=y0;i<y;s += 365+(i++%4==0 && i%100 || i%400==0));

printf("%d-%d-%d is %s.\n",y,m,d,wt[(s%7+w)%7]);

return 0;

}

代码格式和运行样例图片:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-05

用数组很容易解决。

#include <stdio.h>

void main(){

int y,m,d,a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

scanf("%d-%d-%d",&y,&m,&d);

if(y%4==0&&y%100||y%400==0) a[2]++;

d<=0||d>a[m]?printf("日期错误"):printf("日期合法");

}

//运行示例:

本回答被网友采纳
第2个回答  2019-07-05
潭浩强的 C语言程序设计 一书里有例子
相似回答