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

大佬帮忙指点一下哪里错了

#include <stdio.h>
int main()
{
    /* 定义需要计算的日期 */
    int year = 2008;
    int month = 8;
    int day = 8;

     int k,sum,i=0,j=0,f=0,n=0;
     for(k=0;k<=month;k++)
     {
         switch(k)
         {
            case 0:
           n=0;
           break;
          case 1:
          case 3:
          case 5:
          case 7:
          case 8:
          case 10:
          case 12:
          j+=31;
          break;
          case 2:
          f+=28;
          break;
          case 4:
          case 6:
          case 9:
          case 11:
          i+=30;
          break;
         }
         sum=i+j+f+n+day;
         if(year%400==0&&month>2)
         {
             printf("这是一年中的第%d天",sum+1);
         }
         else
         {
             printf("这是一年中的第%d天",sum);
         }
   return 0;
}


正在回答

5 回答

标点符号

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

#include <stdio.h>

int main() 


    int year = 2008;

    int month = 8;

    int day = 8;

    int febDays = 28;

    int totalDays = 0;

    

    /*计算二月份的天数

    闰年包括普通闰年和世纪闰年;

    普通年:能被4整除但不能被100整除的年份为普通闰年。(如2004年就是闰年,1999年不是闰年);

    世纪年:能被400整除的为世纪闰年。(如2000年是闰年,1900年不是闰年)*/

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

    {

        febDays = 29;

    }

    

    switch(month)

    {

        case 12:

            totalDays += 30;

        case 11:

            totalDays += 31;

        case 10:

            totalDays += 30;

        case 9:

            totalDays += 31;

        case 8:

            totalDays += 31;

        case 7:

            totalDays += 30;

        case 6:

            totalDays += 31;

        case 5:

            totalDays += 30;

        case 4:

            totalDays += 31;

        case 3:

            totalDays += febDays;

        case 2:

            totalDays += 31;

        case 1:

            totalDays += day;

        break;

    }

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

    return 0;

}

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

写简单点不好吗?搞那么复杂,没人想看你的代码的。大道至简啊,兄dei

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

湘滦 提问者

刚开始学 还没到大道 试一试不一样的东西
2018-09-24 回复 有任何疑惑可以回复我~

另外要是月份只要是4月之后的你天数加起来怎么样都会是那么几十天..但实际上一年有365天.缺了好几个月啊.

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

湘滦 提问者

我用了FOR哦 老铁 会多次循环输出的
2018-09-24 回复 有任何疑惑可以回复我~
#2

痫yu 回复 湘滦 提问者

之前没看到你有for.现在看到了,倒是想问一下- -当这个循环刚开始的时候你的k的值是0,那么就会运行case 0的情况,而你case 0那里是写了break 的...就已经脱出循环了,那么哪来的循环呢..
2018-09-28 回复 有任何疑惑可以回复我~
#3

痫yu 回复 湘滦 提问者

我们如果不看那个case 0的情况,就按你的思路走的话,那就是当k=1(第一个月),由于你case 1是空的,所以switch里什么都没发生,然后到了下面sum的求和,i,j,f,n都是0(因为switch就是按情况(这里就是按k的值)运行,所以就可以看成sum=day,接着就会输出一次。
2018-09-28 回复 有任何疑惑可以回复我~
#4

痫yu 回复 湘滦 提问者

然后因为你的for循环,所以开始第二次了,k=2的时候,i被求和成了28,然后那么sum就会是2个day的值以及i的值的和了喔.(这里很明显就已经有问题了吧?),此外,由于你的输出是在for循环里的,那么就又会再输出一遍。然后到了第三次循环,k=3了,进入case 3,而case 3也是空的,那么就就等于是做了k=2的时候的操作了,sum就会是3个day的值以及2个i的值的和了.所以说,从一开始你的思路就不对..
2018-09-28 回复 有任何疑惑可以回复我~
查看1条回复

year不是应该磨上4=0吗..为什么是400?

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

湘滦 提问者

是400呀
2018-09-24 回复 有任何疑惑可以回复我~
#2

湘滦 提问者 回复 湘滦 提问者

对不起。。。
2018-09-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

大佬帮忙指点一下哪里错了

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