帮忙解决个c语言的问题

来源:百度知道 编辑:UC知道 时间:2024/04/25 22:39:10
求助
题目如下:
要求输入出生日期(y0,m0,d0)和当前的日期(y1,m1,d1),计算出实际的年龄。
我编的程序如下:#include "stdio.h"
main()
{
int y0,m0,d0,y1,m1,d1,y,m,d;
printf("Input Birthdate");
scanf("%d%d%d",&y0,&m0,&d0);
printf("Input Date");
scanf("%d%d%d",&y1,&m1,&d1);
y=y1-y0;
m=m1-m0;
d=d1-d0;
if(d<0)
{
m=m-1;
if(m1==3)
{
if(y1%4==0) d=d+29;
if(y1%4!=0) d=d+28;
}
switch(m1)
{
case 1: d=d+31;break;
case 2: d=d+31;break;
case 4: d=d+31;break;
case 5: d=d+30;break;
case 6: d=d+31;break;
case 7: d=d+30;break;
case 8: d=d+31;break;
case 9: d=d+31;break;
case 10: d=d+30;break;
case 11: d=d+31;break;
case 12: d=d+30;break;
}

}
if(m<0) m=m+12;y=y-1;

没错误啊,编译运行通过,就是在对2月这个问题上处理不好,因为中间也会有28天出现
还有我又看了一遍
if(m<0) m=m+12;y=y-1;
这句应该改成if(m<0) {m=m+12;y=y-1;}

y=y-1; //去掉这句

看起来程序没什么问题,
但是能被400整除的年份不是闰年

所以
if(y1%4==0) d=d+29;
改成
if(y1%4==0 && y1%400!=0) d=d+29;
应该就没问题了

#include <stdio.h>
int main()
{
int y0,m0,d0,y1,m1,d1,y,m,d;
printf("Input Birthdate");
scanf("%d%d%d",&y0,&m0,&d0);
printf("Input Date");
scanf("%d%d%d",&y1,&m1,&d1);
y=y1-y0;
m=m1-m0;
d=d1-d0;
if(d<0)
{
m=m-1;
if(m1==3)
{
if(y1%4==0) d=d+29;
if(y1%4!=0) d=d+28;
}
switch(m1)
{
case 1: d=d+31;break;
case 2: d=d+31;break;
case 4: d=d+31;break;
case 5: d=d+30;break;
case 6: d=d+31;break;
case 7: d=d+30;break;
case 8: d=d+31;break;
case 9: d=d+31;break;
case 10: d=d+30;break;
ca