提示输入格式,输入一个日期,并返回前一天,且当输入错误时提示错误内容,并递归。
#include <stdio.h>
#include<iostream>
using namespace std;//当输入年份不在1900和2080之间报错,当输入月份不在1-12报错,当输入日期不在1-31报错,当输入为小月时日期大于30报错,当输入为2月闰年时,日期大于29报错,当为平年时日期大于28报错 (输入规范)
int main()
{
void yesterDay(int y,int m,int d);
int year,month,day;
printf("请输入(1900~2080年1~12月1~31日)(格式:XXXX XX XX):\n");
cin>>year>>month>>day;
yesterDay(year,month,day);
return 0;
}
void yesterDay(int y,int m,int d)
{
/*printf("请输入年月日:");
scanf("%d%d%d",&y,&m,&d);*/
if(y<1900||y>2080)
{
printf("年份输入错误,请重新输入1900至2080之间的年份!\n");
main();}
else{
if(d<=31)
{
switch(m)
{
case 1:
d>=2?d=d-1:(y=y-1,m=12,d=31);
printf("昨天是%d年%d月%d日",y,m,d);
case 2:
if((y%4==0&&y%100!=0)||(y%400==0))
{
if(d<=29)
{
d>=2?d=d-1:(m=m-1,d=31);
printf("今年是闰年,昨天是%d年%d月%d日",y,m,d);
}
else{
printf("日期输入错误,闰年二月至多有29天,请重新输入!\n");
main();
}
}
else{
if(d<=28)
{
d>=2?d=d-1:(m=m-1,d=31);
printf("今年是平年,昨天是%d年%d月%d日",y,m,d);
}
else{
printf("日期输入错误,平年二月至多有28天,请重新输入!\n");
main();
}
}
break;
case 3:
if((y%4==0&&y%100!=0)||(y%400==0))
{
d==1?(d=29,m=2):d=d-1;
printf("今年是闰年,昨天是%d年%d月%d日",y,m,d);
}
else
{
d==1?(d=28,m=2):d=d-1;
printf("今年是平年,昨天是%d年%d月%d日",y,m,d);
}
break;
case 8:
d>=2?d=d-1:(m=m-1,d=30);
printf("昨天是%d年%d月%d日",y,m,d);
break;
case 4:
case 6:
case 9:
case 11:
if(d<=30)
{
d>=2?d=d-1:(m=m-1,d=31);
printf("昨天是%d年%d月%d日",y,m,d);
}
else{
printf("日期输入错误,11月是小月最多只有30天,请重新输入!\n");
main();
}
break;
break;
case 5:
case 7:
case 10:
case 12:
d>=2?d=d-1:(m=m-1,d=30);
printf("昨天是%d年%d月%d日",y,m,d);
break;
default : printf("月份输入错误,月份应在1到12之间,请重新输入!\n");
main();
}
}
else if(d>31)
{
printf("输入错误,日期应小于31,请重新输入!\n");
main();
}
}
}
PriorDate(年份,月份,日期)是三个变量的函数。函数返回输入日期的前一个日期。变量年份、月份、日期都是整数值,且满足下面的条件:1900≤年≤2080 ,1≤月≤12, 1≤日≤31。