鱼C论坛

 找回密码
 立即注册
查看: 1024|回复: 2

请版主帮忙删帖

[复制链接]
发表于 2022-1-8 10:54:20 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 小伊布 于 2022-1-9 10:31 编辑
  1. #include <stdio.h>
  2. #include <string.h>

  3. _Bool IS(int year){ //是否是闰年
  4.     return (year%4==0 && year%100!=0) || year%400==0;
  5. }

  6. int Year(int year){ //闰年366天,非闰年365天
  7.     if(IS(year))
  8.         return 366;
  9.     else
  10.         return 365;
  11. }

  12. int main(){
  13.     int a[2][13] = {
  14.         {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
  15.         {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
  16.     };
  17.     char Month[13][12] = {
  18.         "", "January", "February", "March", "April", "May", "June", "July",
  19.         "August", "September", "October", "November", "December"
  20.     };
  21.     char Week[7][9] = {
  22.         "Sunday", "Monday", "Tuesday", "Wednesday",
  23.         "Thursday", "Friday", "Saturday"
  24.     };
  25.     int year, month, week, day;
  26.     int num, row, i, y;
  27.     char M[12];

  28.     while(scanf("%d %s %d", &day, M, &year) != EOF){
  29.         num=0;
  30.         y=1;
  31.         while(y<year){ //公元1年到输入年份之间经过的天数
  32.             num += Year(y);
  33.             y++;
  34.         }
  35.         for(i=0; i<=13; i++){ //根据输入的英文月份找到第几月
  36.             if(!strcmp(M, Month[i]))
  37.                 month = i;
  38.         }
  39.         row = IS(year);
  40.         for(i=0; i<=month; i++){ //计算该年份经过的天数
  41.             if(i==month)
  42.                 num += day;
  43.             else
  44.                 num += a[row][i];
  45.         }
  46.         week = num % 7;
  47.         printf("%s\n", Week[week]);
  48.     }

  49.     return 0;
  50. }
复制代码


代码有时候会连续输出两个字符串,为什么出现这种情况呢?


再问个小白问题,我想debug找到问题,输入后要经过2000多次循环,怎么跳过这一段程序直接调试后面的?如果一开始直接跳到后面debug,就没有输入了。
BX1LUZLZP0I591P7J5R8EYI.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-1-8 11:35:15 | 显示全部楼层
已找到问题所在,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-8 12:07:14 From FishC Mobile | 显示全部楼层
我的代码供参考:
  1. #include <stdio.h>
  2. #include <string.h>

  3. char *month[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
  4. char *week[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

  5. int isLeap(int y){return !(y%4) && y%100 || !(y%400);}

  6. int days(int d, int m, int y){
  7.         int res = d;
  8.         while(--m){
  9.                 if(m!=2) res += ((m%2) && (m<8)) || (!(m%2) && (m>7))? 31 : 30;
  10.                 else res += isLeap(y) ? 29 : 28;
  11.         }
  12.         while(--y) res += isLeap(y) ? 366 : 365;
  13.         return res;
  14. }

  15. int function(){
  16.         int d, m, y;
  17.         char mth[10];
  18.         if(scanf("%d%s%d", &d, mth, &y) == EOF) return 0;
  19.         for(int i = 0; i < 12; i++) if(!strcmp(mth, month[i])) m = i+1;
  20.         printf("%s\n", week[days(d, m, y)%7]);
  21.         return 1;
  22. }

  23. int main(){
  24.         while(function());
  25.         return 0;
  26. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 21:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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