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

大佬帮我看看我哪里出错了,输出总是98天,找了好久了

#include <stdio.h>

int main() 

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

    int year = 2008;

    int month = 8;

    int day = 8;

    int date=0, sum=0;

    /*

     * 请使用switch语句,if...else语句完成本题

     * 如有想看小编思路的,可以点击左侧任务中的“不会了怎么办”

     * 小编还是希望大家独立完成哦~

     */

        switch(month-1)

        {

            case 1:

            case 3:

            case 5:

            case 7:

            case 8:

            case 10:

            date+=31;

            case 2:

            if (year%400==0||(year%4==0 && year%100!=0))

            {

               date+=29;

            }

            else 

            {

                date+=28;

            };

            case 4:

            case 6:

            case 9:

            case 11:

            date+=30;

        }

 

    date+=day;

    printf("2008年8月8日,是该年中的第%d天",date);

    

return 0;

}


提问者:weixin_慕圣7271912 2019-02-20 17:15

个回答

  • qq_狗活_twEPQW
    2019-02-22 21:58:10

    switch执行case时是直接查找7没错,但你7没break;之后它就会顺序执行直到遇到一个break(这个自己做实验跑一跑代码就能发现)。你以为你的代码是说12578⑩腊(掉了腊)都加31,但其实除了10月其他都没加,。然后你也没出循环,31+29+30+8=98.  答案是221. switch是选择语句,选出一个就break最好

  • Cyber丶Kaka
    2019-02-21 17:26:20

    首先,month-1=7,这一点没问题吧

    按楼主的code,由于没有break,所以从case7开始,直到最后

    楼主定义的date是0,就从0算起

    第一段有效代码是case 10: date+=31;  此时date=31  

    //我知道楼主你意思是从第一个月加起,但事实上switch做的是选择,不是顺序计算

    第二段有效代码是case 2:  year定义为2008

    if (year%400==0||(year%4==0 && year%100!=0))

    //先做判断,2008%400=8,8不等于0,看或后面的内容,很显然2008满足后面的内容

    //即判断的条件判定为真,执行以下代码

                   date+=29;   此时date=60

    else 不执行,跳过

    第三段有效代码是case 11:date+=30; 此时date=90

    第四段有效代码是

    date+=day;

        printf("2008年8月8日,是该年中的第%d天",date);

    此时date=date+day,即得date=98

    从而输出date,即2008年8月8日,是该年中的第98天

    我的分析说完了,楼楼慢慢看

  • y归来仍少年
    2019-02-21 17:02:41

    不是输出97 ?