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

白帽天使 2019-09-10 12:17:40
如图,找了半天不知道问题在哪! 自己写的日历,下面是代码,求大佬帮忙看看啊啊啊! 最好复制走在你们的机子上运行下,看看是不是也是输出两遍! #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"); } } }
...全文
123 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
白帽天使 2019-09-10
  • 打赏
  • 举报
回复
引用 3 楼 lin5161678的回复:
scanf "%c" %c前面加空格改成 scanf " %c" 就可以了
啊,改好了,和编译器也有关系,你说的是对的!
白帽天使 2019-09-10
  • 打赏
  • 举报
回复
啊,改好了,和编译器也有关系,你说的是对的!
lin5161678 2019-09-10
  • 打赏
  • 举报
回复
scanf "%c" %c前面加空格改成 scanf " %c" 就可以了
636f6c696e 2019-09-10
  • 打赏
  • 举报
回复
scanf %c 需要再加一个scnaf %c吸收回车符
铖邑 2019-09-10
  • 打赏
  • 举报
回复
出现未知命令,应该是之前的键盘缓存还有内容,会不会是个回车呢?你把那个ascii码打出来

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧