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

输入month=18,结果不对

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

正在回答

6 回答

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

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

#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个月哦");
}


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

书笑 提问者

非常感谢!
2016-01-01 回复 有任何疑惑可以回复我~

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

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

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

1100001

丢死人了,题主请不要采纳,我写错了
2015-12-30 回复 有任何疑惑可以回复我~

和我一起念,goto大法好!

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

不对,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; 

    

}


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

你有测试员的潜质

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

default:

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

break; 

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

举报

0/150
提交
取消

输入month=18,结果不对

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号