下面的程序已经可以运行了,没有闪退现象,但有一告警,原因已经在最后注释中了,你自己可稍修改,也可不予理睬
#include <stdio.h>
const int ll=80;
int main()
{
int jg(int y); // 定义函数jg()
int md(int m,int j); // 定义函数md()
int y1 = 0,y2,m1 = 0,m2,d1 = 0,d2,s1;
int i,sum = 0;
int y3 = y1 + 80,m3 = m1,d3 = d1;
float perc;
printf("日期格式是xxxx xx xx\n"
"请输入生日:");
scanf("%d %d %d",&y1,&m1,&d1);
printf("请输入今日:");
scanf("%d %d %d",&y2,&m2,&d2);
printf("对输入的检查:\n"
"%d %d %d\n"
"%d %d %d\n"
,y1,m1,d1,y2,m2,d2);
sum = 0;
for(i = y1 + 1;i < y2;i++)
{
if(1 == jg(i))
{
sum = sum + 366;
}
else if(0 == jg(i))
{
sum = sum + 365;
}
}
for(i = m1 + 1;i <= 12;i++)
{
` sum = sum + md(i,jg(y1));
}
for(i = 1;i < m2;i++)
{
sum = sum + md(i,jg(y2));
}
for(i = d1;i <= md(m1,jg(y1));i++)
{
sum = sum + 1;
}
for(i = 1;i <= d2;i++)
{
sum = sum + 1;
}
printf("您活了%d天\n",sum);
s1 = sum;
sum = 0;
for(i = y2 + 1;i < y3;i++)
{
if(1 == jg(i))
{
sum = sum + 366;
}
else if(0 == jg(i))
{
sum = sum + 365;
}
}
for(i = m1 + 1;i <= 12;i++)
{
sum = sum + md(i,jg(y2));
}
for(i = 1;i < m2;i++)
{
sum = sum + md(i,jg(y3));
}
for(i = d2;i <= md(m1,jg(y2));i++)
{
sum = sum + 1;
}
for(i = 1;i <= d3;i++)
{
sum = sum+1;
}
perc = (float)s1 / (float)(sum + s1) * 100;
printf("如果你能活到80岁你还剩下%d天,已经活了%.3f %c\n",sum,perc,'%');
return 0;
}
int jg(int y)
{
int flag = 0;
if(y % 400 == 0 || y % 4 == 0 && y % 400 != 0)
{
flag = 1;
}
return flag;
}
int md(int m,int j)
{
if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
{
return 31;
}
else if(m == 4 || m == 6 || m == 9 || m == 11)
{
return 30;
}
else if(m == 2 && j == 1)
{
return 29;
}
else if(m == 2 && j == 0)
{
return 28;
}
}// 此处有一个告警:不是所有的控件路径都返回值,原因是 m = 2,j != 0 和 1 时,没有返回值
|