WwangHB 发表于 2020-1-16 03:48:53

小甲鱼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
请大佬指教是哪里出了问题

WwangHB 发表于 2020-1-16 03:50:01

忘记说题目要求: 1. 写一个生命计算器,要求用户输入生日,显示他在这个世界上活了多少天?c<y

rosta999 发表于 2020-1-16 06:44:19

你的第一个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;
}

sunrise085 发表于 2020-1-16 10:35:32

最大的问题就是第一次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);
}

WwangHB 发表于 2020-1-17 00:31:30

rosta999 发表于 2020-1-16 06:44
你的第一个for循环在执行的过程中i不停的自加,再执行完之后等于a-1,那么你在执行第二个for循环的时候相当 ...

请问大佬为啥这么写就会不停的自加,而不是运行大括号里的内容然后在+1呢

WwangHB 发表于 2020-1-17 00:32:58

sunrise085 发表于 2020-1-16 10:35
最大的问题就是第一次for循环的时候用的是出生的年份->i,在第二次循环的时候,i已经变成了当前的年份->a。 ...

大佬为啥会一直循环自加到当前年份,而不是运行一次+1呢,是因为i 没有赋初值么

WwangHB 发表于 2020-1-17 00:49:43

emmmmmm问了个白痴问题,明白了明白了 感谢大佬们

心驰神往 发表于 2020-11-3 13:48:31

我也犯过这种错误
页: [1]
查看完整版本: 小甲鱼C语言数组课后题