在虚拟机上用c语言写了一个日历代码如下
/*************************************************************************
# FileName : 07for.c
# Author : Liu
# Website : 2581527602@qq.com
# Created : 2021年09月12日 星期日 19时30分12秒
************************************************************************/
#include <stdio.h>
int i,j,k,p,a,iWeekDay,year,mon,m=1,month=1,mo=1,d=1,day;
int iWeekdayByYear(int iY ,int iM ,int iD)
{
int iWeekDay = -1;
if(1 == iM || 2 == iM){
iM+=12;
iY--;
}
iWeekDay = (iD + 1 + 2*iM + 3*(iM+1)/5 + iY + iY/4 - iY/100 + iY/400)%7;
return iWeekDay;
}
int Day(mon)
{
switch(mon){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day = 31;break;
case 4:
case 6:
case 9:
case 11:day = 30;break;
case 2:{
if(((year%4) == 0) && ((year%100)!=0) || ((year%400) == 0)){
day = 29;
}else{
day = 28;
}
}
}
return day;
}
int main(int argc, const char *argv[])
{
printf("***********************请选择***************************\n");
printf("*****************1.打印一整年的日历*********************\n");
printf("*****************2.打印一个月的日历*********************\n");
printf("********************************************************\n");
scanf("%d",&a);
if(a<0 || a>2){
printf("输入错误,请重试");
return -1;
}
if(a==1){
printf("请输入年份:");
scanf("%d,%d",&year,&mon);
if(year<0 || mon<0 || mon>12){
printf("输入错误,请重试");
return -1;
}
for(p=0;p<12;p++){
d = 1;
day = Day(mo);
mo++;
printf("%d年%d月\n",year,m);
m++;
printf(" Sun Mon Tue Wed Thu Fri Sat\n");
iWeekDay = iWeekdayByYear(year,month,1);
month++;
for(i=0;i<iWeekDay;i++){
printf(" ");
}
for(j=0;j<7-iWeekDay;j++){
printf(" %d",d);
d++;
}
printf("\n");
iWeekDay=0;
for(k=0;;k++){
printf(" %d",d);
d++;
iWeekDay++;
if(iWeekDay==7){
printf("\n");
iWeekDay=0;
}
if(d>(day))break;
}
printf("\n");
}
}else if(a==2){
printf("请输入年月(****,**):");
scanf("%d,%d",&year,&mon);
if(year<0 || mon<0 || mon>12){
printf("输入错误,请重试");
return -1;
}
printf("%d年%d月\n",year,mon);
printf(" Sun Mon Tue Wed Thu Fri Sat\n");
iWeekDay = iWeekdayByYear(year,mon,1);
day = Day(mon);
for(i=0;i<iWeekDay;i++){
printf(" ");
}
for(j=0;j<7-iWeekDay;j++){
printf(" %d",d);
d++;
}
printf("\n");
iWeekDay=0;
for(k=0;;k++){
printf(" %d",d);
d++;
iWeekDay++;
if(iWeekDay==7){
printf("\n");
iWeekDay=0;
}
if(d>(day))break;
}
printf("\n");
}
return 0;
}
效果图如下(部分):
我处于小白阶段,所以写的不太好,感觉有很多啰嗦的地方,但是又不知道如何改进,希望有大佬能指点一下,还有就是在用gcc编译器编译时会报一个警告,
我不太懂什么情况,后面如果弄明白了会再完善