答案有个问题,就是month>12的时候,程序不是输出“一年只有12个月哦”后就终止,而是继续往下执行,最后输出“一年只有12个月哦2008年18月8日是该年的第9天”,如何处理可以在month>12时输出一年只有12个月哦,然后终止呢?求教
惨痛的教训啊,需要写代码的回答我再也不会这么草率了,写完一定要仔细检查。
题主,代码我重写了,这次一定没问题,嗯!
#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个月哦"); }
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; }
有对月份的检查,也有对日期的检查。
和我一起念,goto大法好!
不对,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;
}
你有测试员的潜质
default:
printf("一年只有12个月");
break;