for(i=y0;i
if(i%400==0||(i%4==0&&i%100!=0))
n=366;else n=365;
n1+=n;
}
这里你应该从y0+1年开始算
还有
for(j=m0-1;j>0;j--)
{
switch(j)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: l=31;break;
119行 case 2:{ if(n==366) l=29;else l=28;break;}
default : l=30;
}
像这样的地放你都好像没加到zt那里去啊!!!!
在break之前加入语句zt+=m;
default 后面的t+=m这个支队default这一语句有用其他的上面的没有用!
你最好将那些语句改写成
for(j=m0-1;j>0;j--)
{
switch(j)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: l=31;t1+=m;break;//注意:此处用t1之前已经初始化为0了
case 2: if(y0%400==0||(y0%4==0&&y0%100!=0))t1+=29;
else t1+=28;break;
default : t1+=30;break;
下面的也是一样的!!
错误就这么多了!!我帮你从新理了一下你看下行不!!
{
int y0,m0,d0;//输入生日所用变量
int y1,m1,d1;//如入日期所用变量
int i,j,k; //循环控制变量
int n,m,l,t=0;//n是计算今年多少天,m,l是这个月是多少天;t是输入月份距离年初多少天~
int t1=0,n1,zt;//t1是生日所在月份距离年初多少天,n1是输入日子距离年初多少天,zt是总天数
printf("请输入您的生日,如1990年3月5日。请输入1990 3 5\n");//如入各个年份
scanf("%d%d%d",&y0,&m0,&m0);
printf("请输入现在的时间,如2010年3月17日。请输入2010 03 17");
scanf("%d%d%d",&y1,&m1,&d1);
for(i=y0+1;i
if(i%400==0||(i%4==0&&i%100!=0))
n=366;else n=365;
n1+=n;
}
for(j=m0-1;j>0;j--)//循环判断生日所在月份距年初多少天
{
switch(j)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: t1+=31;break;
case 2: if(y0%400==0||(y0%4==0&&y0%100!=0))t1+=29;break;
default : t1+=30;
}
}
for(j=m1-1;j>0;j--)// 循环判断输入月份所在月份距离年初多少天
{
switch(j)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: t+=31;break;
case 2: if(y1%400==0||(y1%4==0&&y1%100!=0))t+=29;break;
default :t+=30;break;
}
}
t1=t1+d0;
t=t+d1;
zt=n1+t-t1;
printf("您一共活了%d天\n",zt);
}
楼主看下对的不!!!
发现的错误就这么多!!还有你的m,n,l其实可以不要的!!
为方便阅读去掉你的注释,问题见我的注释。经调试,影响出错的关键问题列出,还有合理性问题建议认真思考并修改
main()
{
int y0,m0,d0;
int y1,m1,d1;
int i,j,k;
int n,m,l,t=0; /*修改记录,t必须初始化*/
int t1=0,n1=0,zt; /*修改记录,n1必须初始化*/
scanf("%d%d%d",&y0,&m0,&d0); /*问题所在,记录变量有误,第三个变量应该为d0*/
scanf("%d%d%d",&y1,&m1,&d1);
for(i=y0;i
if(i%400==0||(i%4==0&&i%100!=0))
n=366;
else n=365;
n1+=n; /*问题所在,n1没有初始化,运行bug*/
}
for(j=m0-1;j>0;j--)
{
switch(j)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: l=31;break;
/*潜在问题,假如一个人出生在07年2月28,但是现在是08年3月1,出生那年为平年,但是你的l却为29*/
/*这个只是你的程序合理性问题,不是结果异常问题,下同*/
case 2:{ if(n==366) l=29;else l=28;break;}
default : l=30;
}
t1+=l;
}
for(j=m1-1;j>0;j--)
{
switch(j)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: m=31;break;
case 2: {if(n==366) m=29;else m=28;}
default: m=30;
}
t+=m; /*问题所在,t未初始化*/
}
t1=t1+d0;
t=t+d1;
zt=n1+t-t1;
printf("%d\n",zt);
}