我想达到的效果:输入年月日之后出现当前月的每一天(显示出日及对应的星期几)。
遇到的问题:(输入2019年的日期时显示正确,输入2020年的日期后得到的界面与真实不符)
#include<stdio.h>
int year,month,day;
int run[12]={31,29,31,30,31,30,31,31,30,31,30,31}; /*闰年366天*/
int ping[12]={31,28,31,30,31,30,31,31,30,31,30,31}; /*平年365天*/
char weekday[7][10]={"一","二","三","四","五","六","日"}; /*每周七天*/
void line()
{
printf("*******************************************************\n"); /*界面分割线*/
}
void printBegin()
{
int i=0;
printf("\t\t\t万年历");
printf("\n");
line();
for(i=0;i<7;i++)
{
printf("%s\t",weekday[i]);
}
printf("\n");
}
int leap(int year)
{
int four,hundred,fourhundred;
four=year%4;
hundred=year%100;
fourhundred=year%400;
if(fourhundred==0)
{
return 1;
}
else if(four==0&&hundred!=0&&fourhundred!=0)
{
return 1;
}
else
return 0;
}
int daySum(int year,int month,int day,int run[],int ping[]) /*函数功能:计算输入年月日距离1900年一共有多少天*/
{
int i,sum=0; /*m用于判断输入年份是否为闰年*/
for(i=1900;i<=year;i++)
{
int m=leap(year);
if(m==1)
{
sum=sum+366;
}
else
{
sum=sum+365;
}
}
for(i=0;i<month-1;i++) /*计算天数时要把本月份天数删去*/
{
if(leap(year)==1)
{
sum=sum+run[i];
}
else
{
sum=sum+ping[i];
}
}
return sum;
}
void printResult(int sum,int year,int month)
{
int result,temp,i;
result=sum%7;
for(i=0;i<result;i++)
{
printf("\t");
}
temp=7-result;
if(leap(year)==1)
{
for(i=1;i<=run[month-1];i++)
{
printf("%d\t",i);
if(i==temp||(i-temp)%7==0)
{
printf("\n");
}
}
printf("\n");
}
else
{
for(i=1;i<=ping[month-1];i++)
{
printf("%d\t",i);
if(i==temp||(i-temp)%7==0)
{
printf("\n");
}
}
printf("\n");
}
}
int main()
{
int sum;
printf("请输入年,月,日:");
scanf("%d%d%d",&year,&month,&day);
printBegin();
sum=daySum(year,month,day,run,ping);
printResult(sum,year,month);
line();
return 0;
}