不知君 发表于 2022-5-7 18:52:35

带你学c带你飞S1E17第1动动手

可以运行,但不知道为啥打不了今年的日期,有大佬告诉我这个程序的漏洞吗?题目 是求从出生到现在一共活了多少天
如果有【】被吞了是帖子问题,我有输入的{:10_266:}
#include<stdio.h>

int main()
{
        int days,year;
        int count,a,i,b;
        int c=0,q=0;
        int mon[]={31,28,31,30,31,30,31,31,30,31,30,31};
        int d=0,sum=0,f;
        printf("请输入你的生日(如1988-05-20): ");
        scanf("%d",&days);
       
        printf("请输入今年日期(2016-03-28): ");
        scanf("%d",&year);
       
       
        for(a=days+1;a<year;) //算出相隔的年的数量
        {
                d++;
                a++;
                if(a%400==0||(a%4==0&&a%100!=0))//判断是否为闰年
                {
                        i++;
                }
                else
                {
                        count=(d-i)*365+i*366;
                }
        }
       
        if(year%400==0||(year%4==0&&year%100!=0))//判断今年那年是否是闰年
        {
                if(year>2)//判断月份是否大于2月份
                {
                        mon=29;
                        for(b=0;b<year-1;b++)
                        {
                                c=mon+c;//计算月份的天数
                        }
                       
                }
                else if(year=2)
                {
                        c=31;
                }
                else
                {
                        c=0;
                }
        }
        else
        {
                for(b=0;b<year-1;b++)
                {
                        c=mon+c;
                }
        }
       
        if(days%400==0||(days%4==0&&days%100!=0))//判断生日的年份是否为闰年
        {
                if(days=1)
                {
                        mon=29;
                        for(b=1;b<12&&b>0;b++)
                        {
                                q=q+mon;
                        }
                }
                else
                {
                        for(b=2;b<12&&b>=days;b++)
                        {
                                q=q+mon;
                        }
                }
               
                f=mon-days;//用月份数减去生日的当天
        }
        else
        {
                for(b=days;b<12&&b>=days;)
                {
                        q=q+mon;
                       
                }
               
                f=mon-days;
        }
       
       
        sum=count+c+q+year+f;
        printf("你在这个世界上总共生存了%d天\n",sum);
       
        return 0;
}

风车呼呼呼 发表于 2022-5-7 18:58:06

只给最后一个元素赋值有啥用,何况最后一个元素的下标也应该是2才对
scanf("%d",&days);
scanf("%d",&year);

3120781247 发表于 2022-5-7 22:29:04

#include<stdio.h>

int main()
{
      int days,year;
      int count,a,i,b;
      int c=0,q=0;
      int mon[]={31,28,31,30,31,30,31,31,30,31,30,31};
      int d=0,sum=0,f;
      printf("请输入你的生日(如1988-05-20): ");
      scanf("%d-%d-%d",&days,&days,&days);
      
      printf("请输入今年日期(2016-03-28): ");
      scanf("%d-%d-%d",&year,&year,&year);
      
      
      for(a=days+1;a<year;) //算出相隔的年的数量
      {
                d++;
                a++;
                if(a%400==0||(a%4==0&&a%100!=0))//判断是否为闰年
                {
                        i++;
                }
                else
                {
                        count=(d-i)*365+i*366;
                }
      }
      
      if(year%400==0||(year%4==0&&year%100!=0))//判断今年那年是否是闰年
      {
                if(year>2)//判断月份是否大于2月份
                {
                        mon=29;
                        for(b=0;b<year-1;b++)
                        {
                              c=mon+c;//计算月份的天数
                        }
                     
                }
                else if(year=2)
                {
                        c=31;
                }
                else
                {
                        c=0;
                }
      }
      else
      {
                for(b=0;b<year-1;b++)
                {
                        c=mon+c;
                }
      }
      
      if(days%400==0||(days%4==0&&days%100!=0))//判断生日的年份是否为闰年
      {
                if(days=1)
                {
                        mon=29;
                        for(b=1;b<12&&b>0;b++)
                        {
                              q=q+mon;
                        }
                }
                else
                {
                        for(b=2;b<12&&b>=days;b++)
                        {
                              q=q+mon;
                        }
                }
               
                f=mon-days;//用月份数减去生日的当天
      }
      else
      {
                for(b=days;b<12&&b>=days;)
                {
                        q=q+mon;
                     
                }
               
                f=mon-days;
      }
      
      
      sum=count+c+q+year+f;
      printf("你在这个世界上总共生存了%d天\n",sum);
      
      return 0;
}

注意 数组是从下标0(&days, &year)开始访问的

不知君 发表于 2022-5-8 14:19:34

3120781247 发表于 2022-5-7 22:29
#include

int main()


好的,谢谢,我知道了哪里错了,我去运行一下{:10_254:}

不知君 发表于 2022-5-8 14:24:00

3120781247 发表于 2022-5-7 22:29
#include

int main()


emm改了也运行不了{:10_266:}

不知君 发表于 2022-5-8 14:25:27

风车呼呼呼 发表于 2022-5-7 18:58
只给最后一个元素赋值有啥用,何况最后一个元素的下标也应该是2才对

改了也不行{:10_266:}

风车呼呼呼 发表于 2022-5-8 15:39:59

不知君 发表于 2022-5-8 14:25
改了也不行

怎么改的?输入是什么

3120781247 发表于 2022-5-8 19:27:30

你怎么输入的

3120781247 发表于 2022-5-8 19:29:28

不知君 发表于 2022-5-8 14:24
emm改了也运行不了

我在手机上都能运行{:10_249:}

不知君 发表于 2022-5-9 10:17:17

3120781247 发表于 2022-5-8 19:29
我在手机上都能运行

就是把scanf("%d-%d-%d",&year,&year,&year);这些都加回去啊,其他都一样的
页: [1]
查看完整版本: 带你学c带你飞S1E17第1动动手