为了账号安全,请及时绑定邮箱和手机立即绑定

请教各位大神如何解决这个问题(switch-case语句中)

请教各位大神如何解决这个问题(switch-case语句中)

C C++
慕粉1600176492 2016-10-29 19:27:04
//输入格式例如:2016年1月1号,,应写为2016/1/1#include"stdio.h" int main() { int year,month,day,sumday=0; scanf("%d/%d/%d",&year,&month,&day);//个位数的前面不加0,例如8月写成8,而不是08。 switch(month) { case 1:{printf("sumday=%d",sumday+day);break;} sumday+=31; case 2: {printf("sumday=%d",sumday+day);break;} if((year%100!=0&&year%4==0)||year%400==0) { sumday=sumday+29; } else { sumday=sumday+28; } case 3:{printf("sumday=%d",sumday+day);break;} sumday=sumday+31; case 4:{printf("sumday=%d",sumday+day);break;} sumday+=30; case 5:{printf("sumday=%d",sumday+day);break;} sumday+=31; case 6:{printf("sumday=%d",sumday+day);break;} sumday+=30; case 7:{printf("sumday=%d",sumday+day);break;} sumday+=31; case 8:{printf("sumday=%d",sumday+day);break;} sumday+=31; case 9:{printf("sumday=%d",sumday+day);break;} sumday+=30; case 10:{printf("sumday=%d",sumday+day);break;} sumday+=31; case 11:{printf("sumday=%d",sumday+day);break;} sumday+=30; case 12:{printf("sumday=%d",sumday+day);break;} default:printf("error\n"); break; } return 0; }//为什么输入2016/12/31,结果显示确实“sum=31”
查看完整描述

2 回答

?
心有猛虎_细嗅蔷薇

TA贡献119条经验 获得超250个赞

你switch语句里的case执行语句出错了。修改为case 月份:{printf("%d/%d/%d",year,month,day);break;}。

month为判断条件。//img1.sycdn.imooc.com//58148e890001271911770737.jpg

这段代码稍作修改还可以求某年某月某日的某一天是该年的第几天^_^

查看完整回答
2 反对 回复 2016-10-29
  • 慕粉1600176492
    慕粉1600176492
    是的,我就是想求某年某月某日是该年的第几天,但是怎么解决这个问题,怎么才能让sumday+=31这个语句对整体发挥作用,而不是当我选择了这个case之后才执行sumday+=31; 比如我输出2016/8/21,也就是8之前的sumday+=31(30)语句全都执行,请问怎么解决呢
  • 慕粉1600176492
    慕粉1600176492
    但是输出的东西,并不直观,后面的所有的都输出了
?
qq_深猫_04306026

TA贡献1条经验 获得超0个赞


switch 语句的执行是寻找到符合条件的 case ,然后去执行这个 case 后面的语句,直到碰到 break ;

虽然你中间都有 sumday += 30 之类的操作,但实际上任何一句都没有被执行过,不要把语句放到两个 break 之间,这是不会被执行的。

查看完整回答
反对 回复 2016-10-29
  • 慕粉1600176492
    慕粉1600176492
    这个我明白,但是我去掉break之后,后面的所有的选择都会出来,完全看不出是算的几月,如果是调换位置,那么该怎么调换呢
  • 2 回答
  • 0 关注
  • 2578 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信