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

关于月份顺序问题

#include <stdio.h>

int main() 

    /* 定义需要计算的日期 */

    int year = 2008;

    int month = 8;

    int day = 8;

    int sum=0;


    switch(month-=1){


        case 1:sum+=31;

        case 2:if(year%4)sum+=28;else sum+=29;

        case 3:sum+=31;

        case 4:sum+=30;

        case 5:sum+=31;

        case 6:sum+=30;

        case 7:sum+=31;

        break;

}

        sum+=day;

    printf("2014年08月08日是该年的第%d天\n",sum);

//

#include <stdio.h>

int main() 

    /* 定义需要计算的日期 */

    int year = 2008;

    int month = 8;

    int day = 8;

    int sum=0;

switch(month-=1){

case 7:sum+=31;

case 6:sum+=30;

case 5:sum+=31;

case 4:sum+=30;

case 3:sum+=31;

case 2:if(year%4)sum+=28;else sum+=29;

case 1:sum+=31;

break;

}

sum+=day;

printf("2014年08月08日是该年的第%d天\n",sum);

return 0;

}

这是程序基本相同的代码,不同的就是一个月份是从大到小,另一个是从小到大,我想问问为啥结果不一样?

正在回答

2 回答

switch语句会先找到case的数字然后往下运行,第一个只计算了case7,第二个从case7计算到case一。。

0 回复 有任何疑惑可以回复我~

#include <stdio.h>

int main() 

    /* 定义需要计算的日期 */

    int year = 2008;

    int month = 8;

    int day = 8;

    int sum=0;

switch(month-=1){

case 7:sum+=31;break;

case 6:sum+=30;break;

case 5:sum+=31;break;

case 4:sum+=30;break;

case 3:sum+=31;break;

case 2:if(year%4)sum+=28;else sum+=29;break;

case 1:sum+=31;break;

break;

}

sum+=day;

printf("2014年08月08日是该年的第%d天\n",sum);

return 0;

}

你把每一个case 后面加个break;就行了,第一个是因为8月份的时候,输入switch的时候输出就是case7的那个情况,然后接着执行了break;这一结束语句,第二个代码,因为你把case倒过来写,那么case7情况运行完之后没有结束语句break;,那么就表明没有执行结束,不会跳出switch,而是紧接着执行case6;case5;……直到遇到结束语句break;才结束switch

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926207    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

关于月份顺序问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信