上官洛栖 发表于 2020-3-14 15:02:20

C语言求助

本帖最后由 上官洛栖 于 2020-3-16 18:16 编辑

#pragma warning(disable : 4996)
#include <stdio.h>
#include <time.h>
int total(int yeara)//计算公元一年一月一日到输入年份之前的总天数
{
    int i, s = 0, a;

      for (i = 1; i <= yeara - 1; i++)
      {
            if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
                a = 366;
            else
                a = 365;
            s = s + a;
      }
      return s;
   
}
int where(int yearb, int monb) //判断每月天数
{
    int tian;
    switch (monb)
    {
    case 1:            tian = 31; break;
    case 2:
      if (yearb % 4 == 0 && yearb % 100 != 0 || yearb % 400 == 0)
            tian = 29;
      else
            tian = 28;
      break;
    case 3:            tian = 31; break;
    case 4:            tian = 30; break;
    case 5:            tian = 31; break;
    case 6:            tian = 30; break;
    case 7:            tian = 31; break;
    case 8:            tian = 31; break;
    case 9:            tian = 30; break;
    case 10:      tian = 31; break;
    case 11:      tian = 30; break;
    case 12:      tian = 31; break;
    default:
      printf("输入日期不存在");
      main();
    }
    return tian;
}
void when(int day)    //判断输入日期是星期几
{
    FILE* fp = fopen("1.txt", "a+");
    switch (day)
    {
    case 1:            fprintf(fp, "该日为星期一\n");printf("该日为星期一\n");   fclose(fp); break;
    case 2:            fprintf(fp,"该日为星期二\n");   printf("该日为星期二\n");   fclose(fp); break;
    case 3:            fprintf(fp,"该日为星期三\n");   printf("该日为星期三\n");   fclose(fp); break;
    case 4:            fprintf(fp,"该日为星期四\n");   printf("该日为星期四\n");   fclose(fp); break;
    case 5:            fprintf(fp,"该日为星期五\n");   printf("该日为星期五\n");   fclose(fp); break;
    case 6:            fprintf(fp,"该日为星期六\n");   printf("该日为星期六\n");   fclose(fp); break;
    case 7:            fprintf(fp,"该日为星期日\n");   printf("该日为星期日\n");   fclose(fp); break;
    }
}
void why(int month, int day)//公历节日判断
{
    FILE* fp = fopen("1.txt", "a+");
    if (month == 1)
      if (day == 1)
      {
            printf("该日是元旦\n");
            fprintf(fp, "该日是元旦\n");

      }
      else
      {
            printf("该日不是公历节日!\n");
            fprintf(fp, "该日不是公历节日!\n");

      }
    if (month == 3)
    {
      switch (day)
      {
      case 8:   printf("该日是国际妇女节\n");   fprintf(fp, "该日是国际妇女节\n");      break;
      case 12:    printf("该日是植树节\n");         fprintf(fp, "该日是植树节\n");         break;
      default:    printf("该日不是公历节日!\n");   fprintf(fp, "该日不是公历节日!\n");       break;
      }
    }
    if (month == 4)
      if (day == 5)
      {
            printf("该日是清明节\n");
            fprintf(fp, "该日是清明节\n");
      }
      else
      {
            printf("该日不是公历节日!\n");
            fprintf(fp, "该日不是公历节日!\n");

      }
    if (month == 5)
    {
      switch (day)
      {
      case 1:      printf("该日是劳动节\n");      fprintf(fp, "该日是劳动节\n");                  break;
      case 4:      printf("该日是五四青年节\n");   fprintf(fp, "该日是五四青年节\n");      break;
      default:       printf("该日不是公历节日!\n");   fprintf(fp, "该日不是公历节日!\n");       break;
      }
    }
    if (month == 6)
      if (day == 1)
      {
            printf("该日是儿童节\n");
            fprintf(fp, "该日是儿童节\n");
      }
      else
      {
            printf("该日不是公历节日!\n");
            fprintf(fp, "该日不是公历节日!\n");
      }
    if (month == 7)
      if (day == 1)
      {
            printf("该日是中国建党节\n");
            fprintf(fp, "该日是中国建党节\n");
      }
      else

      {
            printf("该日不是公历节日!\n");
            fprintf(fp, "该日不是公历节日!\n");
      }
    if (month == 8)
      if (day == 1)
      {
            printf("该日是建军节\n");
            fprintf(fp, "该日是建军节\n");

      }
      else
      {
            printf("该日不是公历节日!\n");
            fprintf(fp, "该日不是公历节日!\n");
      }
    if (month == 9)
    {
      switch (day)
      {
      case 3:         printf("该日是抗日战争胜利纪念日\n");   fprintf(fp, "该日是抗日战争胜利纪念日\n");          break;
      case 10:      printf("该日是教师节\n");            fprintf(fp, "该日是教师节\n");                   break;
      default:      printf("该日不是公历节日!\n");         fprintf(fp, "该日不是公历节日!\n");         break;
      }
    }
    if (month == 10)
      if (day == 1)
      {
            printf("该日是国庆节\n");
            fprintf(fp, "该日是国庆节\n");
      }
      else
      {
            printf("该日不是公历节日!\n");
            fprintf(fp, "该日不是公历节日!\n");
      }
    if(month==11)
    {
      printf("该日不是公历节日");
      fprintf(fp, "该日不是公历节日");
    }
    if (month == 2)
    {
      printf("该日不是公历节日");
      fprintf(fp, "该日不是公历节日");
    }
    if (month == 12)
    {
      printf("该日不是公历节日");
      fprintf(fp, "该日不是公历节日");
    }

                fclose(fp);
}
void output_year()      //年份输出
{
    int year, d, di, did, z, j;

      printf("请输入年份(eg:2015):");
      FILE* fp = fopen("1.txt", "a+");
      scanf_s("%d", &year);
      fprintf(fp, "查询%d年的年历\n",year);
      z = total(year);
      if (year > 2040 || year < 1940)
      {
            printf("查询范围为1940年到2040年");
            fprintf(fp,"查询范围为1940年到2040年");
            fclose(fp);
            main();
      }
      else
      {
      for (j = 1; j <= 12; j++)
      {
            d = z % 7;
            printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
            printf("      %d月份\n", j);
            printf("sun mon tue wed thu fri sat\n");
            fprintf(fp,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
            fprintf(fp,"      %d月份\n", j);
            fprintf(fp,"sun mon tue wed thu fri sat\n");
            if (d < 6)
                for (di = 1; di <= d + 1; di++)
                {
                  printf("    ");
                  fprintf(fp, "    ");
                }
            for (did = 1; did <= where(year, j); did++)
            {
                printf("%d", did);
                fprintf(fp, "%d", did);
                if (did < 10)
                {
                  printf("   ");
                  fprintf(fp, "   ");
                }
                else
                {
                  printf("");
                  fprintf(fp, "");
                }
                if (did == 6 - d || (did - 6 + d) % 7 == 0 || did == where(year, j))
                {
                  printf("\n");
                  fprintf(fp, "\n");
                }
            }
            z = z + where(year, j);
      }
      fclose(fp);
      main();
    }
}
voidoutput_month()    //年月输出
{
    int year, m, n, d, di, did, j, Z, D;
    printf("请输入所查日历的年月(eg:2015 01):");
    FILE* fp = fopen("1.txt", "a+");
    scanf_s("%d%d", &m, &n);
    fprintf(fp, "查询%d年%d月的月历\n",m,n);
    if (m > 2040 || m < 1940)
    {
      printf("查询范围为1940年到2040年");
      main();
    }
    else
    {
      Z = total(m);
      for (j = 1; j <= n - 1; j++)
      {
            D = where(m, j);
            Z = Z + D;
      }
      d = Z % 7;
      if (n < 12)
      {
            printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
            printf("      %d月份\n", n);
            printf("sun mon tue wed thu fri sat\n");
            fprintf(fp,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
            fprintf(fp,"      %d月份\n", n);
            fprintf(fp,"sun mon tue wed thu fri sat\n");
            if (d < 6)
                for (di = 1; di <= d + 1; di++)
                  printf("    ");
            fprintf(fp,"    ");
            for (did = 1; did <= where(m, n); did++)
            {
                printf("%d", did);
                fprintf(fp,"%d", did);
                if (did < 10)
                {
                  printf("   ");
                  fprintf(fp, "   ");
                }
                else
                {
                  printf("");
                  fprintf(fp, "");
                }
                if (did == 6 - d || (did - 6 + d) % 7 == 0 || did == where(m, n))
                  printf("\n");
                fprintf(fp,"\n");
            }
      }
      else
      {
            printf("月份输入不正确");
      }
      fclose(fp);
      main();
    }
}
voidoutput_day()      //年月日输出
{
    int d, h, j, k, l, x, y, z, Z, Z1, D, jian, judge;
    time_t timep;
    struct tm* p;
    time(&timep);    //系统时间获取
    p = localtime(&timep);//此函数获得的tm结构体的时间,是已经进行过时区转化为本地时间
    printf("请输入年月日(eg:2015 01 01):");
    FILE* fp = fopen("1.txt", "a+");
    scanf("%d%d%d", &x, &y, &z);
    fprintf(fp, "查询%d年%d月%d日的日历\n",x,y,z);
    if (x > 2040 || x< 1940)
    {
      printf("查询范围为1940年到2040年");
      main();
    }
    else
    {
      judge = where(x, y);
      if (judge < z || y>12)
      {
            printf("输入日期不存在!");
            fprintf(fp, "输入日期不存在!");
      }
      else
      {
            Z = total(x);
            for (j = 1; j <= y - 1; j++)
            {
                D = where(x, j);
                Z = Z + D;
            }
            Z = Z + z;
            h = 1900 + p->tm_year;//时间赋值
            k = 1 + p->tm_mon;
            l = 1 + p->tm_mday;
            Z1 = total(h);
            for (j = 1; j <= k - 1; j++)
            {
                D = where(k, j);
                Z1 = Z1 + D;
            }
            Z1 = Z1 + l;
            jian = Z1 - Z;
            printf( "输入日期距今有%d天\n", jian);
            fprintf(fp,"输入日期距今有%d天\n", jian);
            d = Z % 7;
            when(d);
            why(y, z);
      }
      fclose(fp);
      main();
    }
}
int main()
{
    int number;
    printf("\n\n*************查询方式************* \n");
    printf("*      1.查询某年的日历      * \n");
    printf("*      2.查询某月的日历      * \n");
    printf("*      3.查询特定的日期      * \n");
    printf("*      4.查询特定的农历      * \n");
    printf("*      5.查询结束--退出      * \n");
    printf("********************************** \n");
    do
    {
      printf("请输入查询方式:");
      FILE* fp = fopen("1.txt", "a+");
      scanf_s("%d", &number);
      fprintf(fp, "所选的查询方式是第%d项\n",number);
      fclose(fp);
      switch (number)
      {
      case 1:         output_year();break;
      case 2:         output_month(); break;
      case 3:         output_day();   break;
      case 4:         printf("暂未完成,敬请期待"); main();
      case 5:                        break;
      default:      printf("输入错误!\n--------------\n"); break;
      }
    } while (number != 1 && number != 2 && number != 3 && number != 4&&number!=5);
}




为啥输出每月的月历存入到txt里面就不一样了呢??

上官洛栖 发表于 2020-3-14 15:27:06

本帖最后由 上官洛栖 于 2020-3-14 15:28 编辑

C:\Users\86132\DesktopC:\Users\86132\Desktopfile:///C:/Users/86132/Pictures/Camera%20Roll/Z8QV)%7D)~@HOFUL~MEY43IBE.png

上官洛栖 发表于 2020-3-14 16:02:31

#pragma warning(disable : 4996)
#include <stdio.h>
#include <time.h>
int total(int yeara)//计算公元一年一月一日到输入年份之前的总天数
{
    int i, s = 0, a;

      for (i = 1; i <= yeara - 1; i++)
      {
            if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
                a = 366;
            else
                a = 365;
            s = s + a;
      }
      return s;
   
}
int where(int yearb, int monb) //判断每月天数
{
    int tian;
    switch (monb)
    {
    case 1:            tian = 31; break;
    case 2:
      if (yearb % 4 == 0 && yearb % 100 != 0 || yearb % 400 == 0)
            tian = 29;
      else
            tian = 28;
      break;
    case 3:            tian = 31; break;
    case 4:            tian = 30; break;
    case 5:            tian = 31; break;
    case 6:            tian = 30; break;
    case 7:            tian = 31; break;
    case 8:            tian = 31; break;
    case 9:            tian = 30; break;
    case 10:      tian = 31; break;
    case 11:      tian = 30; break;
    case 12:      tian = 31; break;
    default:
      printf("输入日期不存在");
      main();
    }
    return tian;
}
void when(int day)    //判断输入日期是星期几
{
    FILE* fp = fopen("1.txt", "a+");
    switch (day)
    {
    case 1:            fprintf(fp, "该日为星期一\n");printf("该日为星期一\n");   fclose(fp); break;
    case 2:            fprintf(fp,"该日为星期二\n");   printf("该日为星期二\n");   fclose(fp); break;
    case 3:            fprintf(fp,"该日为星期三\n");   printf("该日为星期三\n");   fclose(fp); break;
    case 4:            fprintf(fp,"该日为星期四\n");   printf("该日为星期四\n");   fclose(fp); break;
    case 5:            fprintf(fp,"该日为星期五\n");   printf("该日为星期五\n");   fclose(fp); break;
    case 6:            fprintf(fp,"该日为星期六\n");   printf("该日为星期六\n");   fclose(fp); break;
    case 7:            fprintf(fp,"该日为星期日\n");   printf("该日为星期日\n");   fclose(fp); break;
    }
}
void why(int month, int day)//公历节日判断
{
    FILE* fp = fopen("1.txt", "a+");
    if (month == 1)
      if (day == 1)
      {
            printf("该日是元旦\n");
            fprintf(fp, "该日是元旦\n");

      }
      else
      {
            printf("该日不是公历节日!\n");
            fprintf(fp, "该日不是公历节日!\n");

      }
    if (month == 3)
    {
      switch (day)
      {
      case 8:   printf("该日是国际妇女节\n");   fprintf(fp, "该日是国际妇女节\n");      break;
      case 12:    printf("该日是植树节\n");         fprintf(fp, "该日是植树节\n");         break;
      default:    printf("该日不是公历节日!\n");   fprintf(fp, "该日不是公历节日!\n");       break;
      }
    }
    if (month == 4)
      if (day == 5)
      {
            printf("该日是清明节\n");
            fprintf(fp, "该日是清明节\n");
      }
      else
      {
            printf("该日不是公历节日!\n");
            fprintf(fp, "该日不是公历节日!\n");

      }
    if (month == 5)
    {
      switch (day)
      {
      case 1:      printf("该日是劳动节\n");      fprintf(fp, "该日是劳动节\n");                  break;
      case 4:      printf("该日是五四青年节\n");   fprintf(fp, "该日是五四青年节\n");      break;
      default:       printf("该日不是公历节日!\n");   fprintf(fp, "该日不是公历节日!\n");       break;
      }
    }
    if (month == 6)
      if (day == 1)
      {
            printf("该日是儿童节\n");
            fprintf(fp, "该日是儿童节\n");
      }
      else
      {
            printf("该日不是公历节日!\n");
            fprintf(fp, "该日不是公历节日!\n");
      }
    if (month == 7)
      if (day == 1)
      {
            printf("该日是中国建党节\n");
            fprintf(fp, "该日是中国建党节\n");
      }
      else

      {
            printf("该日不是公历节日!\n");
            fprintf(fp, "该日不是公历节日!\n");
      }
    if (month == 8)
      if (day == 1)
      {
            printf("该日是建军节\n");
            fprintf(fp, "该日是建军节\n");

      }
      else
      {
            printf("该日不是公历节日!\n");
            fprintf(fp, "该日不是公历节日!\n");
      }
    if (month == 9)
    {
      switch (day)
      {
      case 3:         printf("该日是抗日战争胜利纪念日\n");   fprintf(fp, "该日是抗日战争胜利纪念日\n");          break;
      case 10:      printf("该日是教师节\n");            fprintf(fp, "该日是教师节\n");                   break;
      default:      printf("该日不是公历节日!\n");         fprintf(fp, "该日不是公历节日!\n");         break;
      }
    }
    if (month == 10)
      if (day == 1)
      {
            printf("该日是国庆节\n");
            fprintf(fp, "该日是国庆节\n");
      }
      else
      {
            printf("该日不是公历节日!\n");
            fprintf(fp, "该日不是公历节日!\n");
      }
    if(month==11)
    {
      printf("该日不是公历节日");
      fprintf(fp, "该日不是公历节日");
    }
    if (month == 2)
    {
      printf("该日不是公历节日");
      fprintf(fp, "该日不是公历节日");
    }
    if (month == 12)
    {
      printf("该日不是公历节日");
      fprintf(fp, "该日不是公历节日");
    }

                fclose(fp);
}
void output_year()      //年份输出
{
    int year, d, di, did, z, j;
      printf("请输入年份(eg:2015):");
      FILE* fp = fopen("1.txt", "a+");
      scanf_s("%d", &year);
      fprintf(fp, "查询%d年的年历\n",year);
      z = total(year);
      if (year > 2040 || year < 1940)
      {
            printf("查询范围为1940年到2040年");
            fprintf(fp,"查询范围为1940年到2040年");
            fclose(fp);
            main();
      }
      else
      {
      for (j = 1; j <= 12; j++)
      {
            d = z % 7;
            printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
            printf("      %d月份\n", j);
            printf("sun mon tue wed thu fri sat\n");
            fprintf(fp,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
            fprintf(fp,"      %d月份\n", j);
            fprintf(fp,"sun mon tue wed thu fri sat\n");
            if (d < 6)
                for (di = 1; di <= d + 1; di++)
                {
                  printf("    ");
                  fprintf(fp, "       ");
                }
            for (did = 1; did <= where(year, j); did++)
            {
                printf("%d", did);
                fprintf(fp, "%d", did);
                if (did < 10)
                {
                  printf("   ");
                  fprintf(fp, "   ");
                }
                else
                {
                  printf("");
                  fprintf(fp, "   ");
                }
                if (did == 6 - d || (did - 6 + d) % 7 == 0 || did == where(year, j))
                {
                  printf("\n");
                  fprintf(fp, "\n");
                }
            }
            z = z + where(year, j);
      }
      fclose(fp);
      main();
    }
}
voidoutput_month()    //年月输出
{
    int year, m, n, d, di, did, j, Z, D;
    printf("请输入所查日历的年月(eg:2015 01):");
    FILE* fp = fopen("1.txt", "a+");
    scanf_s("%d%d", &m, &n);
    fprintf(fp, "查询%d年%d月的月历\n",m,n);
    if (m > 2040 || m < 1940)
    {
      printf("查询范围为1940年到2040年");
      main();
    }
    else
    {
      Z = total(m);
      for (j = 1; j <= n - 1; j++)
      {
            D = where(m, j);
            Z = Z + D;
      }
      d = Z % 7;
      if (n < 12)
      {
            printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
            printf("      %d月份\n", n);
            printf("sun mon tue wed thu fri sat\n");
            fprintf(fp,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
            fprintf(fp,"      %d月份\n", n);
            fprintf(fp,"sun mon tue wed thu fri sat\n");
            if (d < 6)
                for (di = 1; di <= d + 1; di++)
                {
                  printf("    ");
                  fprintf(fp, "       ");
                }
            for (did = 1; did <= where(m, n); did++)
            {
                printf("%d", did);
                fprintf(fp,"%d", did);
                if (did < 10)
                {
                  printf("   ");
                  fprintf(fp, "   ");
                }
                else
                {
                  printf("");
                  fprintf(fp, "   ");
                }
                if (did == 6 - d || (did - 6 + d) % 7 == 0 || did == where(m, n))
                {
                  printf("\n");
                  fprintf(fp, "\n");
                }
            }
      }
      else
      {
            printf("月份输入不正确");
      }
      fclose(fp);
      main();
    }
}
voidoutput_day()      //年月日输出
{
    int d, h, j, k, l, x, y, z, Z, Z1, D, jian, judge;
    time_t timep;
    struct tm* p;
    time(&timep);    //系统时间获取
    p = localtime(&timep);//此函数获得的tm结构体的时间,是已经进行过时区转化为本地时间
    printf("请输入年月日(eg:2015 01 01):");
    FILE* fp = fopen("1.txt", "a+");
    scanf("%d%d%d", &x, &y, &z);
    fprintf(fp, "查询%d年%d月%d日的日历\n",x,y,z);
    if (x > 2040 || x< 1940)
    {
      printf("查询范围为1940年到2040年");
      main();
    }
    else
    {
      judge = where(x, y);
      if (judge < z || y>12)
      {
            printf("输入日期不存在!");
            fprintf(fp, "输入日期不存在!");
      }
      else
      {
            Z = total(x);
            for (j = 1; j <= y - 1; j++)
            {
                D = where(x, j);
                Z = Z + D;
            }
            Z = Z + z;
            h = 1900 + p->tm_year;//时间赋值
            k = 1 + p->tm_mon;
            l = 1 + p->tm_mday;
            Z1 = total(h);
            for (j = 1; j <= k - 1; j++)
            {
                D = where(k, j);
                Z1 = Z1 + D;
            }
            Z1 = Z1 + l;
            jian = Z1 - Z;
            printf( "输入日期距今有%d天\n", jian);
            fprintf(fp,"输入日期距今有%d天\n", jian);
            d = Z % 7;
            when(d);
            why(y, z);
      }
      fclose(fp);
      main();
    }
}
int main()
{
    int number;
    printf("\n\n*************查询方式************* \n");
    printf("*      1.查询某年的日历      * \n");
    printf("*      2.查询某月的日历      * \n");
    printf("*      3.查询特定的日期      * \n");
    printf("*      4.查询特定的农历      * \n");
    printf("*      5.查询结束--退出      * \n");
    printf("********************************** \n");
    do
    {
      printf("请输入查询方式:");
      FILE* fp = fopen("1.txt", "a+");
      scanf_s("%d", &number);
      fprintf(fp, "所选的查询方式是第%d项\n",number);
      time_t timep;
      struct tm* p;
      time(&timep);
      p = gmtime(&timep);

      fputs("日期: ", fp);
      fprintf(fp, "%d", p->tm_year + 1900);    //获取年
      fputs("年", fp);
      fprintf(fp, "%d", p->tm_mon + 1);      //获取月
      fputs("月", fp);
      fprintf(fp, "%d", p->tm_mday);      //获取日
      fputs("日", fp);

      fputs("      ", fp);
      fputs("时间: ", fp);
      fprintf(fp, "%d", p->tm_hour + 8);      //获取时
      fputs("时", fp);
      fprintf(fp, "%d", p->tm_min);            //获取分
      fputs("分", fp);

      fputs("\r\n", fp);
      fclose(fp);
      getchar();

      //关闭文件
      fclose(fp);
      switch (number)
      {
      case 1:         output_year();break;
      case 2:         output_month(); break;
      case 3:         output_day();   break;
      case 4:         printf("暂未完成,敬请期待"); main();
      case 5:                        break;
      default:      printf("输入错误!\n--------------\n"); break;
      }
    } while (number != 1 && number != 2 && number != 3 && number != 4&&number!=5);
}
已解决,for循环有点小问题,现在改正了{:10_250:}
页: [1]
查看完整版本: C语言求助