当前位置:C++技术网 > 资讯 > 之前的万年历 修正版

之前的万年历 修正版

更新时间:2015-06-27 17:29:25浏览次数:1+次

    之前写的发现有几个bug,现在已经修复,还加了一些其他功能,比如输入除数字外的字符即可清屏。我的程序是用2015年第一天是星期4来推出其它年月的

    代码:

#include<stdio.h>
 #include<stdlib.h>
 int year,month;
 int emonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
 int isrun(int y)//判断是否是闰年的自定义函数,原谅我英文渣掺了拼音。。
{
     if (y%4==0&&y%100!=0||y%400==0)
         return 1;
     else
         return 0;
 }
 int ydays(int y)//传递年数,判断该年有多少天
{
     if (isrun(y))
         return 366;
     else
         return 365;
 }
 int yfd(int a)//传递年数,计算出该年第一天是星期几的自定义函数
{
     int i,s=0;
     if (a>2015)//我是用2015年第一天是星期4来推出其他的
    {
         for (i=2015;i<a;i++)
             s+=ydays(i);
         s=(s+4)%7;
     }
     else if (a<2015)//当年数在2015以下的算法
    {
         for (i=2014;i>=a;i--)
             s+=ydays(i);
         s=s%7;
   s=(4+7-s)%7;
     }
     else
         s=4;
     return s;
 }
 int mfd(int yf,int n)//传递该月当年第一天是星期几以及第几月,返回该月第一天是星期几的自定义函数
{
     int s=0,i;
     if (isrun(year)&&n>2)//如果该年是闰年并且月数是二月以上就会多一天加上让s=1
         s=1;
     for (i=0;i<n-1;i++)
         s+=emonth[i];
     s=(s+yf)%7;
     return s;
 }
 void display(int f)//显示
{
     int a,b=f,i;
     a=emonth[month-1];
     if(isrun(year)&&month==2)//如果正好是2月就要多加一天
        a++;
     printf("  日  一  二  三  四  五  六\n");
     while(b--)
         printf("    ");//开始没有就用空格打出来
    b=f;
     for (i=1;i<=a;i++,b++)
     {
         printf("%4d",i);
         if (b%7==6)
             printf("\n");
     }
     printf("\n");
 }
 int main()
 {
  printf("※小提示:输入除数字外任意字符并回车可清屏※\n\n");
     while (1)
     {
         printf("请输入年份,月数,空格隔开:");
         if(!scanf("%d%d",&year,&month))//当输入除数字外将会执行,清屏,具体实现查看scanf返回值
  {
    while(getchar()!='\n');//先把输入的非数字字符接收掉,注意while后有分号
   system("cls");//清屏
   continue;
   }
   if (month>12||month<1)//判断月数是否符合事实
  {
    puts("月数输入错误,请重新输入");
    continue;
   }
         display(mfd(yfd(year),month));
         printf("\n");
     }
     return 0;
 } 

    效果图:

C语言万年历 万年历代码 

    清屏功能,比如输入离enter较近顺手的分号:

C语言万年历 万年历代码

    按下回车后即可清屏:

C语言万年历 万年历代码

    谢谢支持,欢迎评论建议