小甲鱼C语言数组课后题
#include <stdio.h>/*先考虑从出生到当前日期经过几年,将这几年天数加起来。
然后再算出生那年剩多少天结束,以及当前日期是当前年份过了多少天,相加即得活过总天数*/
int main()
{
int i, j, k, n;
int a, b, c;
long int sum_years = 0, sum_months = 0;
printf("请输入你的生日(如1988-05-20):");
scanf("%d-%d-%d", &i, &j, &k);
printf("请输入今天日期(如2016-03-28):");
scanf("%d-%d-%d", &a, &b, &c);
int num_years;
for( ; i < a; ++i){ //i到a间隔几年
if(i % 4 == 0){ //闰年将366天储存在数组中
num_years = 366;
}
else{
num_years = 365; //不是闰年将365天储存在数组中
}
}
num_years = '\0';
for( ; i < a ; i++)
sum_years = sum_years + num_years; //将数组中数求和
printf("%ld", sum_years);
}
第一部分,只算间隔几年,将这几年天数求和,为什么不行,运行之后输入示例年份,运行结果是0
请大佬指教是哪里出了问题
忘记说题目要求: 1. 写一个生命计算器,要求用户输入生日,显示他在这个世界上活了多少天?c<y 你的第一个for循环在执行的过程中i不停的自加,再执行完之后等于a-1,那么你在执行第二个for循环的时候相当直接从a-1开始了,等于第二个for循环没有执行,输出的sum_years自然等于你的初始化的值,也就是零。解决方案就是你再执行第一次for循环之前,将i的值保存到一个新的变量里,第二次for循环里用新的变量作为判断条件而不是i。
修改过的代码如下:
#include <stdio.h>
/*先考虑从出生到当前日期经过几年,将这几年天数加起来。
然后再算出生那年剩多少天结束,以及当前日期是当前年份过了多少天,相加即得活过总天数*/
int main()
{
int i, j, k, n;
int a, b, c;
long int sum_years = 0, sum_months = 0;
printf("请输入你的生日(如1988-05-20):");
scanf("%d-%d-%d", &i, &j, &k);
printf("请输入今天日期(如2016-03-28):");
scanf("%d-%d-%d", &a, &b, &c);
int num_years;
int tmp = i;
for( ; i < a; ++i){ //i到a间隔几年
if(i % 4 == 0){ //闰年将366天储存在数组中
num_years = 366;
}
else{
num_years = 365; //不是闰年将365天储存在数组中
}
}
num_years = '\0';
for( ; tmp < a ; tmp++)
sum_years = sum_years + num_years; //将数组中数求和
printf("%ld", sum_years);
return 0;
} 最大的问题就是第一次for循环的时候用的是出生的年份->i,在第二次循环的时候,i已经变成了当前的年份->a。
还有小问题,就是给年份的天数赋值的时候,没有考虑出生日期是否过了2月,过了2月就应该赋值下一年的天数。闰年判断也不太对。
#include <stdio.h>
/*先考虑从出生到当前日期经过几年,将这几年天数加起来。
然后再算出生那年剩多少天结束,以及当前日期是当前年份过了多少天,相加即得活过总天数*/
int main()
{
int i, j, k, n;
int a, b, c;
int year, month, day;
long int sum_years = 0, sum_months = 0;
printf("请输入你的生日(如1988-05-20):");
scanf("%d-%d-%d", &year, &month, &day);
printf("请输入今天日期(如2016-03-28):");
scanf("%d-%d-%d", &a, &b, &c);
n=a-year;
int num_years, flag=year;
if (month>2)flag+=1;
for( i=0; i < n; ++i){ //i到a间隔几年
if((flag+i)%100!=0&&(flag+i)%4==0||(flag+i)%400==0 ){ //闰年将366天储存在数组中
num_years = 366;
}
else{
num_years = 365; //不是闰年将365天储存在数组中
}
}
for( i=0; i < n ; i++)
sum_years = sum_years + num_years; //将数组中数求和
printf("%ld", sum_years);
} rosta999 发表于 2020-1-16 06:44
你的第一个for循环在执行的过程中i不停的自加,再执行完之后等于a-1,那么你在执行第二个for循环的时候相当 ...
请问大佬为啥这么写就会不停的自加,而不是运行大括号里的内容然后在+1呢 sunrise085 发表于 2020-1-16 10:35
最大的问题就是第一次for循环的时候用的是出生的年份->i,在第二次循环的时候,i已经变成了当前的年份->a。 ...
大佬为啥会一直循环自加到当前年份,而不是运行一次+1呢,是因为i 没有赋初值么 emmmmmm问了个白痴问题,明白了明白了 感谢大佬们 我也犯过这种错误
页:
[1]