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

输入month=18,结果不对

答案有个问题,就是month>12的时候,程序不是输出“一年只有12个月哦”后就终止,而是继续往下执行,最后输出“一年只有12个月哦2008年18月8日是该年的第9天”,如何处理可以在month>12时输出一年只有12个月哦,然后终止呢?求教

提问者:书笑 2015-12-30 15:06

个回答

  • 1100001
    2015-12-30 21:05:40
    已采纳

    惨痛的教训啊,需要写代码的回答我再也不会这么草率了,写完一定要仔细检查。

    题主,代码我重写了,这次一定没问题,嗯!

    #include "stdio.h"
    main()
    {
     int year,month,day,iday=0,mday;
     printf("请输入年/月/日:\n");
     scanf("%d/%d/%d",&year,&month,&day);
     switch(month)
     {
            case 1:iday=0;mday=31;break;
            case 2:iday=31;mday=28;break;
            case 3:iday=59;mday=31;break;
            case 4:iday=90;mday=30;break;
            case 5:iday=120;mday=31;break;
            case 6:iday=151;mday=30;break;
            case 7:iday=181;mday=31;break;
            case 8:iday=212;mday=31;break;
            case 9:iday=243;mday=30;break;
            case 10:iday=273;mday=31;break;
            case 11:iday=304;mday=30;break;
            case 12:iday=334;mday=31;break;
     }
     if((year%400==0)||(year%100!=0&&year%4==0)&&month==2) mday++;
     if(month<=12&&month>=1)
     {
      iday+=day;
      if((year%400==0)||(year%100!=0&&year%4==0)&&month>2) iday++;
      if(day>0&&day<=mday)
       printf("%d年%d月%d日是该年的第%d天",year,month,day,iday);
      else
       printf("%d月没有%d日哦",month,day);
     }
     else
      printf("一年中只有12个月哦");
    }


  • 1100001
    2015-12-30 20:25:07

    goto只是一个玩笑罢了,虽然也能做,但是肯定会被批判一番;

    题主想要的是可以输出某月某日是一年当中的第几天的程序,并且能对错误输入有相应的反馈,那么我的答案如下;

    #include "stdio.h"
    int imonth(int year,int month);
    main()
    {
     int year,month,day,iday=0,mday;
     printf("请输入年/月/日\n");
     scanf("%d/%d/%d",&year,&month,&day);
     switch(month)
     {
      case 12:iday+=31;
      case 11:iday+=30;
      case 10:iday+=31;
      case 9:iday+=30;
      case 8:iday+=31;
      case 7:iday+=31;
      case 6:iday+=30;
      case 5:iday+=31;
      case 4:iday+=30;
      case 3:iday+=31;
      case 2:iday+=28;
      case 1:iday+=31;
     }
     mday=imonth(year,month);
     if((year%400==0)||(year%100!=0&&year%4==0)) iday++;
     if(month<=12&&month>=1)
     {
      iday+=day;
      if(day>0&&day<=mday)
       printf("%d年%d月%d日是该年的第%d天",year,month,day,iday);
      else
       printf("%d月没有%d日哦",month,day);
     }
     else
      printf("一年中只有12个月哦");
    }
    int imonth(int year,int month)
    {
     int iday=0;
     switch(month)
     {
      case 12:iday+=31;break;
      case 11:iday+=30;break;
      case 10:iday+=31;break;
      case 9:iday+=30;break;
      case 8:iday+=31;break;
      case 7:iday+=31;break;
      case 6:iday+=30;break;
      case 5:iday+=31;break;
      case 4:iday+=30;break;
      case 3:iday+=31;break;
      case 2:iday+=28;break;
      case 1:iday+=31;break;
     }
     if((year%400==0)||(year%100!=0&&year%4==0)) iday++;
     return iday;
    }

    有对月份的检查,也有对日期的检查。

  • 1100001
    2015-12-30 19:37:21

    和我一起念,goto大法好!

  • 书笑
    2015-12-30 15:22:35

    不对,switch里面的default:printf("一年只有12个月");break;只能跳出这个结构,下面的还会继续执行,刚才试着改成这样可以:

    #include <stdio.h>

    int main() 

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

        int year = 2008;

        int month = 8;

        int day = 8;

        /*

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

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

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

         */

          int sum,flag;  

         if(month>0&&month<=12)

         {  

             switch(month)

           {

            case 1:sum=0;break;

            case 2:sum=31;break;

            case 3:sum=59;break;

            case 4:sum=90;break;

            case 5:sum=120;break;

            case 6:sum=151;break;

            case 7:sum=181;break;

            case 8:sum=212;break;

            case 9:sum=243;break;

            case 10:sum=273;break;

            case 11:sum=304;break;

            case 12:sum=334;break;

           }

        sum=sum+day;

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

        { flag=1;}

        else

        {flag=0;}

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

        {sum++;}

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

         }

         else 

         {printf("一年只有12个月哦");}

        return 0; 

        

    }


  • hibkjk
    2015-12-30 15:15:30

    你有测试员的潜质

  • hibkjk
    2015-12-30 15:14:49

    default:

    printf("一年只有12个月");

    break;