为什么输出了两遍??!!

白帽天使 白帽天使 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
如图,找了半天不知道问题在哪! 自己写的日历,下面是代码,求大佬帮忙看看啊啊啊! 最好复制走在你们的机子上运行下,看看是不是也是输出两遍! #include "stdio.h" #include "math.h" int getweek(int Y, int m, int d) { if (m < 3) { Y -= 1; m += 12; } int y = Y % 100; int C = Y - y; int W = (C / 4 - 2 * C + y + y / 4 + 26 * (m + 1) / 10 + d - 1) % 7; if (W < 0) W += 7; return W; } /* 计算某一天是周几 W=[C/4]-2C+y+[y/4]+[26(m+1)/10]+d-1 其中,W是所求日期的星期数.如果求得的数大于7,可以减去7的倍数,直到余数小于7为止.c是公元年份的前两位数字,y是已知公元年份的后两位数字;m是月数,d是日数.方括[ ]表示只截取该数的整数部分。 还有一个特别要注意的地方:所求的月份如果是1月或2月,则应视为前一年的13月或14月.所以公式中m 的取值范围不是1-12,而是3-14. */ bool isleep(int Y) { if (Y % 400 == 0 || (Y % 100 != 0 && Y % 4 == 0)) return true; else return false; } // 判断是否为闰年 int getdays(int Y, int M) { switch (M) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 2: if (isleep(Y)) return 29; else return 28; default: return 30; } } /* 判断指定月有多少天 */ void printfMonth(int Y, int M) { int d = getdays(Y, M); int w = getweek(Y, M, 1); int s = w; printf ("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n"); while (s--) printf("\t"); for (int i = 1; i <= d; i++) { printf("%d\t", i); if ((i + w) % 7 == 0) printf("\n"); } printf("\n"); } int main() { int Y, M; char s=NULL; printf("请输入年月,以空格间隔,enter结束输入\n"); scanf("%d %d", &Y, &M);fflush(stdin); while (1) { printf("%d年%d月:\n", Y, M); printfMonth(Y, M); printf ("输入a上一年,输入b下一年,输入c上一月,输入d下一月,输入e指定年份和月份\n"); scanf("%c", &s); switch (s) { case 'a': Y--; break; case 'b': Y++; break; case 'c': if (M == 1) { M = 12; Y--; } else M--; break; case 'd': if (M == 12) { M = 1; Y++; } else M++; break; case 'e': printf("请输入年份和月份:"); scanf("%d %d", &Y, &M); break; default: printf("未知命令,请重新输入!\n"); } } }
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
白帽天使
C++ 语言 65,214 成员 250,514 内容