C语言-linux cal日历命令自行实现-模拟命令 cal 功能demo

/*
 * 已知1900/1/1星期一 模拟命令 cal 08 2018功能
*/
#include <stdio.h>

int  monthOfDay(int year,int month);
void showCal(int year,int month,int days);

int main(int argc,char *argv[])
{
   int i,year,month,days=0;
   //\033[2J   //"clear"
   printf("\033[1;1H\033[2Jinput year and month :");
   scanf("%d%02d",&year,&month);

   if(year<1900 || month<1 || month>12)
   {
      fprintf(stderr,"input year or month error!\n");
      return 1;
   }
   //1900 --- year 整年的总天数
   for(i=1900;i<year;i++)
   {
      if(i%400==0||(i%4==0&&i%100!=0)){
         days+=366;
      }else{
         days+=365;
      }
   }
   //1900/1/1----year/month
   for(i=1;i<month;i++)
   {
      days=days+monthOfDay(year,i);
   }
   //1900/1/1----year/month/1
   days+=1;

   //printf(">>>>>>%d\n",days%7);
   //show
   
   showCal(year,month,days);

   return 0;
}
int monthOfDay(int year,int month)
{
   int day[12]={31,28,31,30,31,30,31,31,30,31,30,31};

   if(year%400==0||(year%4==0&&year%100!=0))
   {
      day[1]=29;//二月
   }

   return day[month-1];
}
void showCal(int year,int month,int days)
{
   int i,mdays;

   mdays=monthOfDay(year,month);

   printf("      %02d  %d      \n",month,year);
   printf("日 一 二 三 四 五 六\n");
   //把1号置于正确的位置
   for(i=0;i<days%7;i++)
   {
      printf("%2s "," ");
   }
   //
   for(i=1;i<=mdays;i++)
   {
       printf("%2d ",i);
       if(days%7==6){
           putchar('\n');
       }
       days++;
   }
   putchar('\n');
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值