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

求大佬指教为啥运行成功输出错误

#include <stdio.h>

int main() 

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

    int year = 2008;

    int month = 8;

    int day = 8;

    int sum=0;

    int flag;

    /*

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

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

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

     */

    switch(month)

    { 

        case 1:sum+=31;break;

        case 3:sum+=31;break;

        case 5:sum+=31;break;

        case 7:sum+=31;break;

        case 8:sum+=31;break;

        case 10:sum+=31;break;

        case 12:sum+=31;break;

        case 4:sum+=30;break;

        case 6:sum+=30;break;

        case 9:sum+=30;break;

        case 11:sum+=30;break;

        case 2:sum+=28;break;

    }

    sum=sum+8;

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

    {

        flag=0;

    }

    else

    {

        flag=1;

    }

    if(flag==1&&month>=2)

    {

        sum++;

    }

    printf("%d年%d月%d日是该年的第%d天",year,month,day,sum);

    


正在回答

1 回答

你的case得按数字的顺序来,要从case 1按顺序写到case 12才行,因为case语句是从上到下执行的,你这样写的话,这个程序会从case 8就跳出来,所以就相当于你只是把1、3、5、7、8月的天数加在了一起,少了2、4、6月啊,肯定错了,而且你要把一月设置为0天,因为你看啊,如果我们现在这个题目不是八月而是让你找出一月八号是第几天,你现在已经把一月的天数设置成了31天,然后你从case语句中跳出来之后还把总天数加了8,也就是说现在就有31+8=39天了,一月八号怎么也不可能是一年里的第39天吧

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

weixin_慕仙4062266

而且,你后面的if语句也错了,你写的是这个:year%400==0||(year%4==0&&year%100==0),而正确的应该是:year%400==0||(year%4==0&&year%100!=0),这是表示闰年的意思,所以如果满足这个式子的话,也就是说,这一年是闰年,那么flag就应该记为1,而不是你写的0,你写反了,因为闰年的二月才是29天,比平年多一天,像你那样做的话,就是错的
2022-11-13 回复 有任何疑惑可以回复我~
#2

慕数据3556412 提问者 回复 weixin_慕仙4062266

谢谢,大佬
2022-11-14 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

求大佬指教为啥运行成功输出错误

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