从键盘上输入一个日期,请输出该日期的前一天、后一天的日期,该日期是该年的第几天,该日期是星期几等信息。
我之前给的程序有问题吗
#include <stdio.h>
#include <stdlib.h>
int year,month,date,sumDate;
int checkYear(int a){
if((a%4==0&&a%100!=0)||(a%400==0)){
return 1;
}else{
return 0;
}
}
void sum(int a,int b,int c){
int arr[]={31,28,31,30,31,30,31,31,30,31,30,31};
int arr1[]={31,29,31,30,31,30,31,31,30,31,30,31};
int count=0; //计算闰年的数量
int curSumDate=0;
int i;
int week;
for(i=1970;i<a;i++){
if( checkYear(i)){
count++; //计算这期间所有的闰年数
}
}
sumDate=365*(a-1970)+count; //将本年以前所有的天数计算出来
if(checkYear(a)){//当年是闰年
for(i=0;i<b-1;i++){
sumDate+=arr1[i]; //将本年当月之前的所有月份加起来
curSumDate+=arr1[i];//计算当年月份,用来输出位于当年的多少天
}
}else{
for(i=0;i<b-1;i++){
sumDate+=arr[i];
curSumDate+=arr[i];
}
}
sumDate+=c; //将本年本月的天数加起来
curSumDate+=c;
switch((sumDate+3)%7){ //由于1970年1月1日是星期四所以整除要+3天
case 0:week=7;break;
case 1:week=1;break;
case 2:week=2;break;
case 3:week=3;break;
case 4:week=4;break;
case 5:week=5;break;
case 6:week=6;break;
}
printf("%d年%d月%d日是%d年的第%d天,星期%d\n",a,b,c,a,curSumDate,week);
}
int main(void) {
aa: printf("请输入年月日,之间用空格隔开\n");
scanf("%d%d%d",&year,&month,&date);
if(year<1970){
printf("年份不合法,请重新输入\n");
system("pause");
goto aa;
}else{
if(month<1||month>12){
printf("月份不合法,请重新输入\n");
system("pause");
goto aa;
}else{
if(date<1||date>31){
printf("日期不合法,请重新输入\n");
system("pause");
goto aa;
}
}
}
// printf("\n%d此年是闰年\n",year);
switch(month){
case 4:;
case 6:;
case 9:;
case 11:
if(date>30){
printf("日期不合法,请重新输入\n");
system("pause");
goto aa;
}else{
}
;
case 2:
if((year%4==0&&year%100!=0)||(year%400==0)){
if(date>29){
printf("日期不合法,请重新输入\n");
system("pause");
goto aa;
}
}else{
if(date>28){
printf("日期不合法,请重新输入\n");
system("pause");
goto aa;
}
}
}
sum(year,month,date);
if(date-1==0){
switch(month){
case 1:
sum(year-1,12,31);
break;
;
case 2:;
case 4:;
case 6:;
case 8:;
case 9:
sum(year,month-1,31);
;
case 5:;
case 7:;
case 10:;
case 12:
sum(year,month-1,30);
break;
case 3:if(checkYear){
sum(year,month-1,29);
}else{
sum(year,month-1,28);
}
break;
}
}else{
sum(year,month,date-1);
}
switch(month){
case 1:;
//date+1的代码自己参考date-1
default:
sum(year,month,date+1);
}
return 0;
}
date-1的已经写了,+1的你按照这个思路,自己写一下