鱼C论坛

 找回密码
 立即注册
查看: 1597|回复: 4

[已解决]二月的日期判断错在哪里了啊

[复制链接]
发表于 2023-10-7 17:29:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
键盘上按照年月日的格式输入年份、月和日期,运行程序以后,判断这一天是这一年的第几天。

输入描述
标准输入,输入三个整数,即年、月、日(都是正数),以空格间隔,不保证输入的年份和日期是正确的。

输出描述
标准输出,输出这一天是这一年的第几天,如果日期不合法,输出“data error!”。
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int year,mon,day,days=0;
  5.     scanf("%d%d%d",&year,&mon,&day);
  6.     if(year>9999||year<1000) printf("data error!");
  7.     else
  8.    
  9.     {if(((year%400==0)||(year%4==0&&year%100!=0))&&mon>2)
  10.         days++;
  11.     switch(mon)
  12.     {
  13.         case 1:
  14.         {
  15.             if(day>31) printf("data error!");
  16.             else
  17.             {days=day;printf("%d",days);}
  18.             break;
  19.         }
  20.         case 2:
  21.         {
  22.             if(((year%400==0||(year%4==0&&year%100!=0))&&day>29)||
  23.                ((year%400!=0||(year%4!=0&&year%100==0))&&day>28))
  24.                 printf("data error!");
  25.             else
  26.             {days=day+31;printf("%d",days);}
  27.             break;
  28.         }
  29.         case 3:
  30.         {
  31.             if(day>31) printf("data error!");
  32.             else
  33.             {days=day+59;printf("%d",days);}
  34.             break;
  35.         }
  36.             case 4:
  37.         {
  38.             if(day>30) printf("data error!");
  39.             else
  40.             {days=day+90;printf("%d",days);}
  41.             break;
  42.         }
  43.         case 5:
  44.         {
  45.             if(day>31) printf("data error!");
  46.             else
  47.             {days=day+120;printf("%d",days);}
  48.             break;
  49.         }
  50.         case 6:
  51.         {
  52.             if(day>30) printf("data error!");
  53.             else
  54.             {days=day+151;printf("%d",days);}
  55.             break;
  56.         }
  57.         case 7:
  58.         {
  59.             if(day>31) printf("data error!");
  60.             else
  61.             {days=day+181;printf("%d",days);}
  62.             break;
  63.         }
  64.         case 8:
  65.         {
  66.             if(day>31) printf("data error!");
  67.             else
  68.             {days=day+212;printf("%d",days);}
  69.             break;
  70.         }
  71.         case 9:
  72.         {
  73.             if(day>30) printf("data error!");
  74.             else
  75.             {days=day+243;printf("%d",days);}
  76.             break;
  77.         }
  78.         case 10:
  79.         {
  80.             if(day>31) printf("data error!");
  81.             else
  82.             {days=day+273;printf("%d",days);}
  83.             break;
  84.         }
  85.         case 11:
  86.         {
  87.             if(day>30) printf("data error!");
  88.             else
  89.             {days=day+304;printf("%d",days);}
  90.             break;
  91.         }
  92.         case 12:
  93.         {
  94.             if(day>31) printf("data error!");
  95.             else
  96.             {days=day+334;printf("%d",days);}
  97.             break;
  98.         }
  99.         default:printf("data error!");
  100.     }
  101. }
  102. }
复制代码
最佳答案
2023-10-7 19:50:12
本帖最后由 六翻了 于 2023-10-7 20:20 编辑

之前写的,你看下判断2月到底有几天的部分

找一个确定的闰年作为一个点,再用fabs求绝对值


  1. struct Date
  2. {
  3.     int day;
  4.     int month;
  5.     int year;
  6. };
  7. int days(int, int, int, int);
  8. int days(int a, int b, int c, int i)
  9. {
  10.     while(b--)
  11.     {
  12.         switch(b)
  13.         {   case 1: c += 31; break;
  14.             case 3: c += 31; break;
  15.             case 5: c += 31; break;
  16.             case 7: c += 31; break;
  17.             case 8: c += 31; break;
  18.             case 10: c += 31; break;
  19.             case 12: c += 31; break;
  20.             case 4: c += 30; break;
  21.             case 6: c += 30; break;
  22.             case 9: c += 30; break;
  23.             case 11: c += 30; break;
  24.             case 2:         break;
  25.         }
  26.     }
  27.     if((b) > 2)
  28.     {
  29.         if(i == 0)
  30.         {
  31.             c += 29;
  32.         }
  33.         else
  34.         {
  35.             c += 28;
  36.         }
  37.     }
  38.     return c;
  39. }
  40. int main(void)
  41. {
  42.     struct Date head;
  43.     int i, sum;
  44.     do
  45.     {
  46.         printf("请输入年月日:");
  47.         scanf("%d-%d-%d", &head.year, &head.month, &head.day);
  48.         i = fabs((head.year) - 2000);
  49.         i = i % 4;
  50.         if(i != 0 && head.day >= 29 && head.month == 2)//非闰年 >= 29天
  51.         {
  52.             printf("错误!该年2月只有28天!!\n");
  53.         }
  54.         else if(i == 0 && head.day > 29 && head.month == 2)//润年 > 29天
  55.         {
  56.             printf("错误!该年2月只有29天!!\n");            
  57.         }
  58.         if (head.month == 1 || (head.month>1 && head.month <= 7 && (head.month % 2) == 1) ||
  59.             (head.month>=8 && head.month <= 12 && head.month % 2 == 0) && head.day > 31)
  60.         {
  61.             printf("date error!\n");
  62.         }
  63.         else if((head.month>1 && head.month < 7 && (head.month % 2) == 0) ||
  64.             (head.month>=8 && head.month <= 12 && head.month % 2 == 1) && head.day > 30)
  65.         {
  66.             printf("date error!\n");            
  67.         }
  68.         else
  69.             break;

  70.     } while (1);
  71.     sum = days(head.year, head.month, head.day, i);

  72.     printf("该日是本年的第 %d 天\n", sum);

  73.     return 0;
  74. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-2 02:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表