问答详情
源自:4-17 switch与if语句的应用

关于月份顺序问题

#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;

}

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

提问者:Gulliver_c 2017-03-29 14:38

个回答

  • qq_名草有主_0
    2017-03-29 15:32:33

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

  • 慕粉13075102205
    2017-03-29 15:31:53

    #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